c语言同步控制程序设计,C语言如何在线程间实现同步和互斥

线程之间的同步和互斥解决的问题是线程对共同资源进行访问。Posix有两种方式:

信号量和互斥锁;信号量适用同时可用的资源为多个的情况;互斥锁适用于线程可用的资源只有一个的情况

1、互斥锁:互斥锁是用加锁的方式来控制对公共资源的原子操作(一旦开始进行就不会被打断的操作)

互斥锁只有上锁和解锁两种状态。互斥锁可以看作是特殊意义的全局变量,因为在同一时刻只有一个线程能够对互斥锁进行操作;只有上锁的进程才可以对公共资源进行访问,其他进程只能等到该进程解锁才可以对公共资源进行操作。

互斥锁操作函数:

pthread_mutex_init();//初始化

pthread_mutex_lock();//上锁                            参数:pthread_mutex_t *mutex

pthread_mutex_trylock();//判断上锁                 参数:pthread_mutex_t *mutex

pthread_mutex_unlock();//解锁                        参数:pthread_mutex_t *mutex

pthread_mutex_release();//消除互斥锁             参数:pthread_mutex_t *mutex

互斥锁分为快速互斥锁、递归互斥锁、检错互斥锁;在 init 的时候确定

int pthread_mutex_t(pthread_mutex_t *mutex, const pthread_mutex_t mutexattr);

第一个参数:进行操作的锁

mutexattr:锁的类型,默认快速互斥锁(阻塞)

2、信号量:信号量本质上是一个计数器,在操作系统做用于PV原子操作; P操作使计数器-1;V操作使计数器+1. 在互斥操作中可以是使用一个信号量;在同步操作中需要使用多个信号量,并设置不同的初始值安排它们顺序执行 sem_init();                                                  // 初始化操作     sem_wait();      // P操作,计数器减一;阻塞        参数:sem_t *sem sem_trywait();   // P操作,计数器减一;非阻塞      参数:sem_t *sem sem_post();     // V操作,计数器加一                   参数:sem_t *sem sem_destroy();   // 销毁信号量                                参数:sem_t *sem sem_init(sem_t *sem, int pshared, int value); pshared用于指定多少个进程共享;value初始值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值