一.前言
线程的主要优势在于,能够通过全局变量来共享信息。不过,这种便捷的共享是有代价的:必须确保多个线程不会同时修改同一变量,或者某一线程不会读取正在由其他线程修改的变量。
临界区是指访问某一共享资源的代码片段,并且这段代码的执行应为原子操作,也就是同时访问同一共享资源的其他线程不应终端该片段的执行。
二.什么交线程同步
线程同步:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作,其他线程才能对该内存地址进行操作,而其他线程则处于等待状态。
三.实例
下面的例子将直观地向大家展示:多个线程竞争同一个共享资源时造成地线程同步问题
/*使用多线程实现买票的案列有三个窗口,一共是100张票
*/
#include <stdio.h>
#include <pthread.h>
#include <string.h>//全局变量,所有的线程都共享这个资源
int tickets = 100;void *sellticket(void *arg)
{//买票while(tickets > 0){printf("线程%ld, 正在卖第 %d 张门票\n",pthread_self(),tickets);tickets--;}return NULL;
}int main()
{pthread_t tid1,tid2,tid3;pthread_create(&tid1,NULL,sellticket,NULL);pthread_create(&tid2,NULL,sellticket,NULL);pthread_create(&tid3,NULL,sellticket,NULL);//阻塞回收pthread_join(tid1,NULL);pthread_join(tid2,NULL);pthread_join(tid2,NULL);//线程分离// pthread_detach(tid1);// pthread_detach(tid2);// pthread_detach(tid2);//主线程退出pthread_exit(NULL);return 0;
}