使用信号量实现线程间同步
2013-08-10 12:25
351 查看
#include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <semaphore.h> #define SIZE 1024 void *thread_function(void *arg); char buffer[SIZE]; sem_t sem; int main() { int res; pthread_t a_thread; void *thread_result; res = sem_init(&sem, 0, 0); if (res != 0) { perror("Sem init failed"); exit(EXIT_FAILURE); } res = pthread_create(&a_thread, NULL, thread_function, NULL); if (res != 0) { perror("Thread create failed"); exit(EXIT_FAILURE); } printf("#Input some text. Enter 'end' to finish\n"); while (scanf("%s", buffer)) { printf ("\n#Input: %s\n", buffer); sem_post(&sem); if (strncmp("end", buffer, 3) == 0) break; } printf ("\nWaiting for thread to finish...\n"); res = pthread_join(a_thread, &thread_result); printf ("\n%s\n", thread_result); if (res != 0) { perror("Thread join failed"); exit(EXIT_FAILURE); } printf ("Thread join\n"); sem_destroy(&sem); exit(EXIT_SUCCESS); } void *thread_function(void *arg) { sem_wait(&sem); while (strncmp("end", buffer, 3) != 0) { printf("#You input %d characters\n", strlen(buffer)); sem_wait(&sem); } pthread_exit("thread exit successfully...\n"); }
相关文章推荐
- 【Java面试题】23 java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
- 信号量+临界区实现线程间的同步
- 使用事件对象实现线程间的同步
- Java中有几种方法实现一个线程,用什么关键字修饰同步方法?stop()和suspend()方法为何不提倡使用?
- Linux多线程——使用信号量同步线程
- Linux多线程——使用信号量同步线程
- 线程间同步之信号量实现环形buf
- java 中有几种方法可以实现一个线程? 用什么关键字修 饰同步方法? stop()和 suspend()方法为何不推荐使用?
- Linux多线程——使用信号量同步线程
- 使用两个信号量实现主线程和线程池同步
- Java多线程之~~~使用CountDownLatch来同步多个线程实现一个任务
- Linux多线程——使用信号量同步线程
- Linux多线程——使用信号量同步线程
- Linux多线程——使用信号量同步线程
- Linux平台用C++实现信号量,同步线程
- java中有几种方法可以实现一个线程?用什么关键字修饰同步方法 stop()和suspend()方法为何不推荐使用?
- Linux下通过共享内存进行进程间通信,进程间同步使用信号量来实现
- 使用互斥量实现线程间同步
- 多线程---使用ManualResetEvent来控制线程间的同步(实现了消费者和生产者模式)
- Linux多线程——使用信号量同步线程