摘要: 原因: 如有两个线程,两把互斥锁,线程1先对互斥锁A上锁,延时,然后在对互斥锁B上锁;二线程2先对互斥锁B上锁,延时,再对互斥锁A上锁,这样就会死锁,因为两线程以不同顺序拿到了对方的锁,并且不能解锁; 解决方式: 1. 以相同的顺序加锁 2. 使用pthread_mutex_trylock()函数 阅读全文
posted @ 2023-02-26 23:02 踏浪而来的人 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 线程信号量可以实现线程的互斥和线程的同步。 信号量的数据类型:sem_t 信号量本质上是一个非负整数计数器,是共享资源的数目(即共享资源还剩下几个,信号量的值大于或等于0时,线程才不阻塞) 信号量的创建和销毁: 参数: sem:信号量指针 pshared:是否在进程之间共享;0为不共享,1为共享 v 阅读全文
posted @ 2023-02-26 22:50 踏浪而来的人 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 1. 条件变量(通互斥锁一起使用,互斥锁用来保护等待队列的) 2. 线程信号量 条件变量: 条件变量的内部是一个等待队列,这个队列中放置阻塞的线程,线程在这个队列中等待通知。 因为这个等待队列也时一个共享资源,所以也要用一把互斥锁来保护,即对等待队列上锁。 队列中的线程等特定的条件发生,当条件不满足 阅读全文
posted @ 2023-02-26 21:10 踏浪而来的人 阅读(13) 评论(0) 推荐(0) 编辑
摘要: 1. 互斥锁 2. 读写硕 3. 线程信号量 互斥锁: 互斥锁的数据类型:pthread_mutex_t 互斥锁是一种加锁的方法来控制对共享资源的访问。同一时刻只能由一个线程掌握某个互斥锁(就是有一把互斥锁),一个线程对共享资源上锁了,其他线程希望上锁一个已经上了互 斥锁的共享资源,那么这些线程将会 阅读全文
posted @ 2023-02-26 10:33 踏浪而来的人 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 互斥: 相互排斥,表示线程对共享资源的访问时相互排斥的,即不能同时操作(一个线程对共享资源写时,另外一个线程不能再对这个共享资源进行读写),保证线程的安全,互斥不能保证 线程执行的先后顺序 实现互斥的方式: 互斥锁 读写锁 线程信号量 同步: 包含了互斥,即既保证了线程的安全,又能保证线程执行的先后 阅读全文
posted @ 2023-02-26 09:25 踏浪而来的人 阅读(27) 评论(0) 推荐(0) 编辑