线程的互斥机制

线程互斥机制用于解决多线程访问共享资源的冲突。互斥锁通过原子操作保证只有一个线程能访问临界资源,防止并发问题。文章介绍了互斥锁的工作原理,分析了不使用互斥锁导致的并发错误,并探讨了如何通过原子操作如xchg指令确保锁的正确实现。
摘要由CSDN通过智能技术生成

线程的存在是为实现资源的共享。
因此多个线程同时访问共享数据时可能会冲突,为了解决这种冲突我们需要引入互斥锁。互斥锁的目的是为了保护公共资源(临界资源),但是互斥锁自身又要被多个线程所看到,因此互斥锁也是一个临界资源。因此在上锁和解锁的时候一定要保证原子操作,否则这个互斥锁就会变得毫无意义,使得多个线程依然可以去同时访问这个临界资源。
多个线程产生访问冲突会导致不可预知的结果,举个例子:

#include<stdio.h>
#include<pthread.h>
static int count =0;
void* pthread_run(void *val)
{
   int i=0;
   int sum=0;
   while(i<5000)
   {
       ++i;
       sum=count;
       printf("process :%d,pthread :%u,count :%d\n",getpid(),pthread_self(),count);
       count=sum+1;
      //++count;
   }
}
int main()
{
    pthread_t id1;
    pthread_t id2;
    pthread_create(&id1,NULL,pthread_run,NULL);
    pthre
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值