cs241 critical_concurrency

cs241 critical_concurrency
函数原型 int sem_init(sem_t *sem, int pshared, unsigned int value);

说明:

​ C语言中,信号量的数据类型为结构sem_t,它本质上是一个长整型的数

​ sem_init()初始化一个定位在sem的匿名信号量。value参数指定信号量的初始值。pshared参数指明信号量是由进程内线程共享还是由进程间共享。若pshared的为0,那么信号量将被进程内的线程共享,若pshared是非0值,那么信号量将在进程间共享

usleep()函数是把调用该函数的线程挂起一段时间单位是微秒

函数sem_post( sem_t *sem )用来增加信号量的值。当有线程阻塞在这个信号量上时,调用这个函数会使其中的一个线程不在阻塞,选择机制同样是由线程的调度策略决定的。

函数sem_wait( sem_t *sem )被用来阻塞当前线程直到信号量sem的值大于0,解除阻塞后将sem的值减一,表明公共资源经使用后减少。函数sem_trywait ( sem_t *sem )是函数sem_wait()的非阻塞版本,它直接将信号量sem的值减一。

函数sem_destroy(sem_t *sem)用来释放信号量sem。

使用信号量的时候要在编译的时候加-pthread
pthread_mutex_t:互斥锁,多线程中对共享变量的包保护

初始化:

int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr)
//or
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t: 条件变量,线程间同步一般和pthread_mutex_t一起使用,以防止出现逻辑错误,即如果单独使用条件变量,某些情况下(条件变量前后出现对共享变量的读写)会出现问题

初始化:

#include <pthread.h>
int pthread_cond_init(pthread_cond_t *cv, const pthread_condattr_t *cattr);
//or
pthread_cond_t cv = PTHREAD_COND_INITIALIZER;

阻塞在条件变量上pthread_cond_wait,用于阻塞当前线程,等待别的线程使用pthread_cond_signal()pthread_cond_broadcast来唤醒它 pthread_cond_wait() 必须与pthread_mutex配套使用。pthread_cond_wait()函数一进入wait状态就会自动release mutex。当其他线程通过pthread_cond_signal()pthread_cond_broadcast,把该线程唤醒,使pthread_cond_wait()通过(返回)时,该线程又自动获得该mutex`。

解除在条件变量上的阻塞pthread_cond_signal,该函数的作用是发送一个信号给另外一个正在处于阻塞等待状态的线程,使其脱离阻塞状态,继续执行.如果没有线程处在阻塞等待状态,pthread_cond_signal也会成功返回。

阻塞直到指定时间pthread_cond_timedwait

释放阻塞的所有线程pthread_cond_broadcast

释放条件变量pthread_cond_destroy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值