linux生产者消费者(2)
来源:互联网 发布:梦幻西游数据号怎么弄 编辑:程序博客网 时间:2024/06/06 19:00
一、posix信号量
信号量基础知识http://blog.csdn.net/xiajun07061225/article/details/8467853
二、示例代码
#include<pthread.h>#include<semaphore.h> #define BUFFER_SIZE 4 /* 循环缓冲区中的整数 */ struct data {int buffer[BUFFER_SIZE]; /* 实际数据 */int readpos, writepos; /* 职位的阅读和写作 */ };struct data test_data;sem_t not_full;//当缓冲区不满时,生产者可以生产数据sem_t not_empty;//当缓冲区不空时,消费者可以消费数据 void *producer(void) {int n = 1;while(1) {sem_wait(¬_full);sleep(1);printf("------producer data[%d] = %d\n", test_data.writepos,n);test_data.buffer[test_data.writepos] = n++;test_data.writepos = (test_data.writepos + 1) % BUFFER_SIZE;sem_post(¬_empty); }}void *consumer(void) { while (1) {sem_wait(¬_empty);sleep(rand()%3);printf("-consumer data[%d] = %d \n", test_data.readpos,test_data.buffer[test_data.readpos]);test_data.readpos = (test_data.readpos + 1) % BUFFER_SIZE;sem_post(¬_full);}} int main(void) {int res;test_data.readpos = 0;test_data.writepos = 0;res = sem_init(¬_full, 0, BUFFER_SIZE);//producer if (res != 0) { printf("Semaphore initialization failed");return -1; }res = sem_init(¬_empty, 0, 0);//consumer if (res != 0) { printf("Semaphore initialization failed");return -1; }pthread_t th_producer, th_consumer; //定义线程号 void *retval; //返回任意类型的指针 pthread_create(&th_producer, NULL, producer, 0); //创建并跳转到参数为指向线程标识符的指针th_a线程函数producer pthread_create(&th_consumer, NULL, consumer, 0); //创建并跳转到参数为指向线程标识符的指针th_b线程函数consumer /* 等到生产者和消费者完成 */ pthread_join(th_producer, &retval); //等待线程号为th_a线程函数结束,并将返回值保存入retval pthread_join(th_producer, &retval); //等待线程号为th_b线程函数结束,并将返回值保存入retval return 0; }
三、演示效果
0 0
- linux生产者消费者(2)
- linux 生产者 消费者 问题
- linux生产者,消费者问题
- linux生产者消费者(1)
- linux生产者消费者(3)
- linux线程-生产者/消费者
- 【Linux】生产者消费者模型
- Linux--生产者与消费者
- Linux:生产者消费者模型
- linux:生产者消费者模型
- Linux--生产者与消费者
- 生产者_消费者2
- 生产者消费者2
- Linux下生产者消费者 实现
- linux线程,生产者消费者例子
- linux生产者消费者模型源代码
- 基于linux的生产者-消费者
- Linux线程--生产者消费者模型
- 如何将App从一个账号迁移到另一个账号?
- Android中Bitmap内存占用分析
- shell--表达式和运算符
- PAT(乙级) 1002.写出这个数
- 3836: [Poi2014]Tourism
- linux生产者消费者(2)
- ProgressBar线程更新问题
- JNI中字符串之间的转换
- Android差分升级原理和实现方式
- shell--输入输出
- Android使用UiAutomator进行测试
- 牛顿迭代法总结
- UiAutomatorHelper
- 菜鸟的安卓之路。2016.06.21