0
我的意思是编写一个程序,该程序需要2个不同的命令行选项,并使用信号量将输出从“第一个”切换到“下一个”。更详细 -信号量执行的问题
•程序与不同的命令行选项
progName randNumber fRunSeed "F" & progName randNumber nRunSeed "N" &
•F =首先运行,N =下次运行
•每个运行是指来产生随机数的randNum量,但COUTS运行两次每个随机数之后的一行。
•使用信号量在F运行和N运行之间交替使用cout。 (F为第一个)
输出应包含运行(F或N),进程ID和随机数。
到目前为止我已经写好了头文件,并对一些实际的代码进行了处理。但是我不知道在哪里实际实现信号量......我的确了解信号量的用途,并且这个程序并没有很好地利用它,但这正是我想要使用的。
有人可以看看我的代码,并指导我在正确的方向插入信号量,或告诉我该怎么做?
感谢您所有的帮助 - 代码如下
我的头:
union semun {
int val;
struct semid_ds *buf;
ushort *array;
};
class Semaphore {
private:
const unsigned int SemCount;
int SemID;
public:
Semaphore (key_t key, int howManySemaphoresToCreate);
void Init (int SemaphoreNumber, int Value);
int ReadValue (int SemaphoreNumber);
// Decrease the value of a semaphore, semaphoreNumber, by 1
void Wait (int SemaphoreNumber);
// Increase the value of a semaphore, semaphoreNumber, by 1.
void Signal (int SemaphoreNumber);
// Remove the semaphore group.
void Destroy();
};
而且我写来处理数据处理的代码。我不知道在哪里插入信号量,所以现在实际的代码是一个粗略的草图。
int main(int argc, char *argv[]){
int firstSeed = atoi(argv[2]);
int nextSeed = atoi(argv[2]);
int numRandNums = atoi(argv[1]);
if(argv[3] == "F"){
srand(firstSeed);
for(int i = 0; i < numRandNums; i++){
cout << "F: " << "ID: " << getpid() << " Num: " << rand() << endl;
}
}
else if(argv[3] == "N"){
srand(nextSeed);
for(int j = 0; j < numRandNums; j++){
cout << "N: " << "ID: " << getpid() << " Num: " << rand() << endl;
}
}
}
我知道这个网站是不是人来完成你的工作适合你,但在这一点上我不明白实际执行信号量,虽然我已经阅读了很多关于他们,我无法找到实例类似于我需要做的才能真正看到相似之处。另外,我不认为getpid()
是获得信号量进程ID的正确方法,但正如我所说的,现在只是一个粗略的草案。
谢谢任何能够帮助我的人。