互斥锁

 

  互斥锁用来保证同一时间内只有一个线程在执行某段代码(临界区)。多线程编程最容易出问题的地方,就是临界区的界定和访问控制。

  下面是一个生产者,消费者的简单例子。生产者、消费者公用一个缓冲区,这里假定缓冲区只能存放一条消息。

 

生产者,消费者互斥

 1 //生产者,消费者问题
 2 //生产者、消费者公用一个缓冲区,这里假定缓冲区只能存放一条消息。
 3 
 4 
 5 #include <stdio.h>
 6 #include <stdlib.h>
 7 #include <pthread.h>
 8 #include <sys/time.h>
 9 
10 static char buff[50];
11 int have_msg=0;
12 pthread_mutex_t mutex;
13 int delay=1;
14 
15 void consumeItem(char *buff)
16 {
17     printf("consumer item\n");
18 }
19 
20 void produceItem(char *buff)
21 {
22     printf("produce item\n");
23 }
24 
25 void *consumer(void *param)//消费者进程回调函数
26 {
27     while (1)
28     {
29         pthread_mutex_lock(&mutex);
30         if (have_msg>0)
31         {
32             have_msg--;
33             consumeItem(buff);
34         }
35         pthread_mutex_unlock(&mutex);
36         sleep(delay);
37     }
38     return NULL;
39 }
40 
41 void *producer(void *param)//生产者进程回调函数
42 {
43     while (1)
44     {
45         pthread_mutex_lock(&mutex);
46         if (have_msg==0)
47         {
48             have_msg++;
49             produceItem(buff);
50         }
51         pthread_mutex_unlock(&mutex);
52         sleep(delay);
53     }
54     return NULL;
55 }
56 
57 //主函数
58 int main()
59 {
60     pthread_t tid_c, tid_p;
61     void *retval;
62     
63     pthread_mutex_init(&mutex, NULL);//默认属性初始化锁
64     
65     pthread_create(&tid_p, NULL, producer, NULL);
66     pthread_create(&tid_c, NULL, consumer, NULL);
67 
68     pthread_join(tid_p, &retval);
69     pthread_join(tid_c, &retval);
70 
71     return 0;
72 }
View Code

相关文章: