C 信号量理解

C 信号量理解,c,C,让我更好地解释一下,我现在知道变量*contador需要信号量 这个练习要求我们放置信号量,这样这两个程序就可以工作了,*contador不会超过200 而((*contador)==MAX);这是大学老师在一次考试中做出的,这也是我想要理解的 1. //program people enter 2. #define MAX 200 3. int main(int argc, char* argv[]) { 4. int *contador; 5. 6. int fd=shm_open(

让我更好地解释一下,我现在知道变量*contador需要信号量

这个练习要求我们放置信号量,这样这两个程序就可以工作了,*contador不会超过200

而((*contador)==MAX)
;这是大学老师在一次考试中做出的,这也是我想要理解的

1. //program people enter
2. #define MAX 200 
3. int main(int argc, char* argv[]) { 
4. int *contador; 
5. 
6. int fd=shm_open("/contador",O_RDWR|O_CREAT,S_IRUSR|S_IWUSR); 
7. 
8. int ret=ftruncate(fd,sizeof(int)); 
9. 
10. contador=mmap(0,sizeof(int),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); 
11. 
12. while ((*contador)==MAX); 
13   sem_wait();
14. (*contador)++; 
15   sem_post();
16. } 




1. //program people get out
2. int main(int argc, char* argv[]) { 
3. int *contador; 
4. 
5. int fd=shm_open("/contador",O_RDWR|O_CREAT,S_IRUSR|S_IWUSR); 
6. 
7. int ret=ftruncate(fd,sizeof(int)); 
8. 
9. contador=mmap(0,sizeof(int),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); 
10. sem_wait();
11. (*contador)--; 
12  sem_post();
13. } 

好的,在编写代码时,
while((*contador)==MAX)应该无限地阻止…直到
*contador
的值等于
MAX

让我更好地解释一下,这包括两个程序在共享内存的情况下同时运行,一个计算进入的人和其他离开的人。这一个是人们输入的,contador++,我现在知道它需要信号量,所以它一次写一个。我的问题是,当这个contador达到200(=MAX)时,它将循环,直到另一个程序得到小于200的值?实际上,重新阅读时,我认为是这个问题(标题中的“信号量”帮助:-p)。但它仍然会阻塞,直到共享内存中有MAX。所以基本上你的程序只有在contador==MAX.Hmm时才会结束,如果我能理解,当共享内存达到200时,第一个程序变成一个无限循环,直到第二个减少*contador。是这样吗?另一个问题你认为sem_wait和sem_post中的信号量做得好吗?事实上,反过来说,你发布的程序会一直被阻止,直到共享内存中的值等于
200
。我无法区分这两种情况,因为您没有提供它们。但是,试着在每篇文章中只回答一个问题,如果你还有其他问题,请在一个简单的代码示例中加入上下文和其他问题!