Linux-线程

线程控制

线程创建-pthread_create

线程分离-pthread_detach

线程取消-pthread_cancel

线程比较-pthread_equal

线程同步

场景

**
对于一个数据data
a 同一时间:a线程和b线程
b a
**

学习目标

**
互斥锁–pthread_mutext_t mutex
读写锁–pthread_rwlock_t lock
**

互斥锁

使用步骤

**
创建锁 pthread_mutext_t mutext;
使用锁 pthread_mutext_init(&mutext); |–mutext=1;
找资源
加锁
pthread_mutex_lock(&mutex); |–mutext=0;
临界区
解锁
pthread_mutex_unlock(&mutext); |–mutext=1;
**

相关函数

**
创锁:pthread_mutex_t mutex;
用锁:pthread_mutex_init(&mutex,NULL);
加锁:pthread_mutex_lock(&mutex);
试锁:pthread_mutex_trylock(&mutex);
解锁:pthread_mutex_unlock(&mutex);
毁锁:pthread_mutex_destroy(&mutex);
**

其它

原子操作
cup处理一个指令,线程/进程在处理完这个指令之前是不会失去cpu
临界区
死锁

读写锁

使用场景

**
1 创建锁
2 初始化锁 pthread_rwlock_init
3 加锁 pthread_rwlock_rdlock
4 尝试加读锁 pthread_rwlock_trydlock
5 解锁 pthread_rwlock_unlock
6 销毁锁 pthread_rwlock_destroy
**

**
互斥锁-读串行,写串行
读写锁-读并行,写串行
阻塞线程
不是什么时候都能阻塞线程
链表Node *head=NULL;
while(head==NULL)
{
//我们想让代码在这个位置阻塞
//等待链表中有了节点之后再继续向下运行
//使用条件变量
}
//链表不为空的处理代码
。。。。
。。。。
**

条件量–阻塞线程

**
创建:
pthread_cond_t cond;
操作:
关联:pthread_cond_init(&cond,NULL);
销毁:pthread_cond_destroy(cond);
阻塞等待下一个条件变量:pthread_cond_wait(&cond,&mutex);
阻时等待下一个条件变量:pthread_cond_timedwait();
唤醒部分的阻塞在条件变量上的线程:pthread_cond_signal();
唤醒全部的阻塞在条件变量上的线程:
**
**

生产
使用
A
B
C

**

信号量(信号灯)–高级的互斥锁

**
头文件 semaphore.h
信号量类型 sem_t sem;

共享资源

**

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值