读书笔记之UNIX环境高级编程(11)

本文详细介绍了线程的概念,包括线程ID、控制线程、线程创建与运行顺序、线程间的退出机制、pthread_join函数作用及线程状态,深入探讨了线程同步与互斥的实现方式,如读写锁与信号通知机制,同时强调了正确使用全局变量与堆变量的重要性,以及线程栈间的数据冲突避免策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程
1.像每个进程有一个进程ID一样,每个线程也有一个线程ID。进程ID在整个系统中是唯一的,进程ID相同,但线程ID不同,线程ID只在它所属的进程环境有效
2.每个进程只有一个控制线程即main线程
3.线程创建时并不能保证哪个线程会先运行:是新创建的线程还是调用线程
4.主线程需要休眠,如果不休眠,就可能先退出,这样在新线程有机会运行之前整个进程可能就已经终止了
5.如果进程中的任意线程调用了exit,_Exit,或者_exit,那么整个进程会终止。调用pthread_exit不终止整个进程
6.pthread_join一直阻塞,直到指定的线程调用pthread_exit,或者返回
7.如果线程处于分离状态,那么pthread_join调用就会失败
8.同一进程的线程的栈有会被其他线程栈覆盖的可能性,可以使用全局变量或堆变量
9.如果锁的粒度太粗,就会出现多线程阻塞等待相同的锁,如果太细,会影响系统性能
10.读写锁可以有三种状态:读模式下加锁状态,写模式下加锁状态,不加锁状态。一次只有一个线程可以占有写模式的读写锁,但是多个线程可以同时占有读模式的读写锁

11.因为是在while循环检查条件,所以不会出现问题:线程醒来,发现队列为空,然后返回继续等待。如果代码不能容忍这种竞争,就要在向线程发送信号时占有互斥量

12.cond_wait的作用就是等待信号通知

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值