linux多线程之线程同步讲解

一.前言

线程的主要优势在于,能够通过全局变量来共享信息。不过,这种便捷的共享是有代价的:必须确保多个线程不会同时修改同一变量,或者某一线程不会读取正在由其他线程修改的变量。

 临界区是指访问某一共享资源的代码片段,并且这段代码的执行应为原子操作,也就是同时访问同一共享资源的其他线程不应终端该片段的执行。

 二.什么交线程同步

线程同步:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作,其他线程才能对该内存地址进行操作,而其他线程则处于等待状态。

 三.实例

下面的例子将直观地向大家展示:多个线程竞争同一个共享资源时造成地线程同步问题

/*
    使用多线程实现买票的案列
    有三个窗口,一共是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;
}

上一篇:Python学习从0到1 day27 Python 高阶技巧 ④ 设计模式 — 工厂模式


下一篇:用Python写一个计算器程序