您的位置:首页 > 其它

线程间同步 之 信号量

2011-09-25 20:59 190 查看
#include
#include
#include
#include

#define NUM 5
int queue[NUM];
sem_t blank_number, product_number;

void *producer(void *arg)
{
int c = 0;

while (1)
{
sem_wait(&blank_number);
queue[c] = rand()%10+1;
sem_post(&product_number);
printf("Product %d\n", queue[c]);
c = (c + 1) % NUM;        //为了让五个空间循环使用
sleep(rand()%5);
}
}
void *consumer(void *arg)
{
int m = 0;
while (1)
{
sem_wait(&product_number);
printf("Consumer %d\n", queue[m]);
queue[m] = 0;
sem_post(&blank_number);
m = (m + 1) % NUM;
sleep(rand()%5);
}
}
int main(int argc, char *argv[])
{
pthread_t pid, cid;

sem_init(&blank_number, 0, NUM);
sem_init(&product_number, 0, 0);
pthread_create(&pid, NULL, producer, NULL);
pthread_create(&cid, NULL, consumer, NULL);
pthread_join(pid, NULL);
pthread_join(cid, NULL);
sem_destroy(&blank_number);
sem_destroy(&product_number);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: