创建互斥锁
pthread_mutex_t mutex;
初始化互斥锁
pthread_mutex_init(&mutex); 相当于mutex=1;
在临界区添加互斥锁
pthread_mutex_lock(&mutex);   mutex=0
[临界区代码]
pthread_mutex_unlock(&mutex);    mutex=1
释放互斥锁资源
pthread_mutex_destroy(&mutex);
必须在所有操作共享资源的线程上都加上锁,否则不能起线程同步的作用
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <sys/types.h>
  #include <unistd.h>
  #include <pthread.h>
  #include <time.h>
  //定义一把锁
  pthread_mutex_t mutex;
  void *mythread1(void *args)
  {
  	while(1)
  	{
  		//加锁
      	pthread_mutex_lock(&mutex);
      	printf("hello ");
      	sleep(rand()%3);
      	printf("world\n");
      
  		//解锁
  		pthread_mutex_unlock(&mutex);
  		sleep(rand()%3);
  	}
  
  	pthread_exit(NULL);
  }
  void *mythread2(void *args)
  {
  	while(1)
  	{
  		//加锁
      	pthread_mutex_lock(&mutex);
      	printf("HELLO ");
      	sleep(rand()%3);
      	printf("WORLD\n");
  		//解锁
  		pthread_mutex_unlock(&mutex);
  		sleep(rand()%3);
  	}
  	pthread_exit(NULL);
  }
  int main()
  {
  	int ret;
  	pthread_t thread1;
  	pthread_t thread2;
  	//随机数种子
  	srand(time(NULL));
  	//互斥锁初始化
  	pthread_mutex_init(&mutex, NULL);
  	ret = pthread_create(&thread1, NULL, mythread1, NULL);
  	if(ret!=0)
  	{
  		printf("pthread_create error, [%s]\n", strerror(ret));
  		return -1;
  	}
  	ret = pthread_create(&thread2, NULL, mythread2, NULL);
  	if(ret!=0)
  	{
  		printf("pthread_create error, [%s]\n", strerror(ret));
  		return -1;
  	}
  	//等待线程结束
  	pthread_join(thread1, NULL);
  	pthread_join(thread2, NULL);
  	//释放互斥锁
  	pthread_mutex_destroy(&mutex);
  	return 0;
  }
读写锁也叫共享-独占锁,当以读模式锁住时,他是以共享模式锁住的,以写模式锁住时,他是以独占模式锁住的。即读共享,写独占。
读写锁适用于对数据结构读的次数远大于写的情况
读并行,写独占,写的优先级高
定义一把读写锁
 pthread_rwlock_t rwlock;
初始化读写锁
 int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock , const pthread_rwlockattr_t *restrict attr);
函数参数:
   * rwlock:读写锁       
   * attr:读写锁属性,传NULL为默认属性原文:https://www.cnblogs.com/luyimin/p/14363504.html