线程同步 : 当一个线程在对某个临界资源进行操作时,其他线程都不可以对这个资源进行操作,直到该线程完成操作,其他线程才能操作,也就是协调步调,让线程按预定的先后次序进行运行.线程同步的方法有四种:互斥锁,信号量,条件变量,读写锁
1 #include <pthread.h>
2 #include <errno.h>
3 #include <stdio.h>
4 #include <unistd.h>
5 #include <stdlib.h>
6 #include <pthread.h>
7
8 /*
9 *互斥锁使用方法:
10 *(0)pthread_mutex_t mutex;
11 *(1)锁初始化:pthread_mutex_init(&mutex,NULL);
12 *(2)加锁:pthread_mutex_lock(&mutex);
13 *(3)解锁:pthread_mutex_unlock(&mutex);
14 *(4)销毁锁:pthread_mutex_destroy(&mutex);
15 */
16
17 pthread_mutex_t mutex;
18 int num=0;
19
20 void *thread_function(void *arg);
21 int main(void)
22 {
23 pthread_t pthread[5];
24 int ret;
25 int i=0;
26 pthread_mutex_init(&mutex,NULL);
27 for(;i<5;i++){ //创建五个线程,且五个线程都修改num变量
28 ret=pthread_create(&pthread[i],NULL,thread_function,NULL); //创建线程,线程开始执行
29 if(ret !=0){
30 perror("pthread_creat error");
31 exit(1);
32 }
33 }
34
35 char * pthread_ret;
36 i=0;
37 for(;i<5;i++){
38 pthread_join(pthread[i],(void **)&pthread_ret); //等待线程结束
39 printf("join:thread%d return:%s\n",i,pthread_ret);
40 }
41 pthread_mutex_destroy(&mutex);
42 return 0;
43 }
44 void *thread_function(void *arg)
45 {
46 printf("Thread begins running\n");
47 int i=0;
48 for(;i<1000;i++){
49 pthread_mutex_lock(&mutex); //加锁
50 num++; //多线程访问同一变量,必须保证原子化操作
51 printf("num=%d\n",num);
52 pthread_mutex_unlock(&mutex); //解锁
53 }
54 pthread_exit("thread over");
55 }