信号量 :指的是semaphore,相当于设置初始值为N的互斥量,
N就表示同时访问的线程数(针对的是线程同步问题)
信号:指的是用来实现进程与进程之间,进程与线程之间的一种异步机制。(针对的是异步处理的问题)
下面展示一些 内联代码片。
重在理解思路
#include实验现象#include #include #include #include #define NUM 5 int queue[NUM]; sem_t sem_blank,sem_food;//空盘子,包子 void producer(){ int i=0; while (1){ sem_wait(&sem_blank); queue[i]=rand()%100+1; sem_post(&sem_food); printf("producer queue[%d] is : %dn",i,queue[i]); i++; i=i%5; sleep(rand()%3); } } void consumer(){ int i=0; while (1){ sem_wait(&sem_food); printf("consumer queue[%d] is %dn",i,queue[i]); queue[i]=0; sem_post(&sem_blank); i++; i=i%5; sleep(rand()%3); } } int main(void){ //建立一个信号量 int ret; ret=sem_init(&sem_blank,0,5);//value值就表示桌子上有几个盘子 if (ret==-1){ perror("[sem_blank]"); return -1; } ret=sem_init(&sem_food,0,0);//value值表示桌子上有几个包子 if (ret==-1){ perror("[sem_food]"); return -1; } //创建两个线程,生产者,消费者 pthread_t tid1,tid2; while ((pthread_create(&tid1,NULL,(void *)producer,NULL))!=0); while ((pthread_create(&tid2,NULL,(void *)consumer,NULL))!=0); //回收线程 pthread_join(tid1,NULL); pthread_join(tid2,NULL); }
最好根据实现现象分析代码,分析你得到的结论



