线程间同步 之 信号量
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; }
相关文章推荐
- Linux多线程——使用信号量同步线程
- JAVA 线程 同步 信号量
- Linux多线程——使用信号量同步线程
- 多值信号量 与线程间同步
- Linux多线程——使用信号量同步线程
- 线程间同步--互斥锁、条件变量、信号量
- 线程同步3 ------ 信号量实现进程或者线程之间的同步
- 对线程、互斥、同步、信号量的内在关联性的简单讨论
- JAVA线程同步 (三)信号量
- Linux平台用C++实现信号量,同步线程
- 用GCD线程组与GCD信号量将异步线程转换为同步线程
- java线程同步的三种方法[synchronized关键字,Lock加锁,信号量Semaphore]
- 对线程、互斥、同步、信号量的内在关联性的简单讨论
- linux c 线程间同步(通信)的几种方法--互斥锁,条件变量,信号量,读写锁
- linux 线程的同步 三 (内存信号量的使用)
- Linux多线程——使用信号量同步线程
- 用C++封装Win32信号量,同步线程
- 线程同步之semaphore信号量,代码实现
- 同步事件,信号量,互斥,临界区,线程,线程池C++实现(win32,linux)
- 多线程六 经典线程同步之信号量Semaphore