2017-03-18 90 views
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的正确方法,但正如我所说的,现在只是一个粗略的草案。

谢谢任何​​能够帮助我的人。