随笔分类 - 多线程
摘要:目录线程池原理线程池组成 C语言线程池https://github.com/LiviaYu1/ThreadPoolC 线程池原理 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会
阅读全文
摘要:[toc] #信号量 比条件变量更加简单  如图,当前老王的信号量为2,老赵的信号量为4,老赵开进去一辆车,那么空闲
阅读全文
摘要:[toc] #补充文档 > https://www.cnblogs.com/god-of-death/p/11452308.html #条件变量 锁的不足:只能给一个线程放行,剩下的还需要阻塞 条件变量:可以让多个线程访问临界区,但会出现混乱问题,仍需要和互斥锁搭配使用 #为什么 使用场景复杂,适用
阅读全文
摘要:[toc] #读写锁 一把锁,并不是读锁和写锁 称之为读写锁,因为他既可以锁定读操作,也可以锁定写操作 `pthread_rwlock_t rwlock;` 锁中记录了 * 锁的状态 打开关闭 * 锁定的操作 锁读 锁写 * 哪个线程持有钥匙 使用方式和互斥锁相同: 1. 找共享资源 2. 确定临界
阅读全文
摘要:[toc] #加锁后忘记解锁 ``` // 场景1 void func() { for(int i=0; i<6; ++i) { // 当前线程A加锁成功, 当前循环完毕没有解锁, 在下一轮循环的时候自己被阻塞了 // 其余的线程也被阻塞 pthread_mutex_lock(&mutex); ..
阅读全文
摘要:[toc] #线程函数 每一个线程都有一个唯一的ID,ID类型为pthread_t,这个ID是一个无符号长整型 unsigned long,如果想要得到当前线程的ID可以调用 `pthread_t pthread_self(void);` 线程创建: ``` #include int pthread
阅读全文
摘要:[toc] #linux和windows的差别 linux没有线程,windows系统有线程,但是两者对外部的表现是相同的 #差别 1. 线程有自己独立的地址空间,多个线程共用同一个地址空间 * 线程更加节省系统资源,开销更少,效率更高 * 每个线程有属于自己栈区和寄存器 * 多个线程共享:代码区
阅读全文