【求问help】我正在学习linux c 的多线程和互斥锁
里面的一个经典例子要求按顺序不断地输出a、b、c
解法是在一个循环里创建3个线程,每个线程获得一把独立的互斥锁,建立一条锁链,即上游线程输出了一个字符后,自动解开下游线程的锁,以此将四个线程首尾链接在一起,然后大家一起等待第一个线程解锁
我不能理解的是下面这段循环的代码,第一次循环的时候就已经上了第一把锁了,到第二次循环的时候又上了另一把锁,可是此时第一把锁并没有解开,后面那句创建线程的代码岂不是被锁住了?还怎么执行呢?
当然这段代码实际上并没有问题,我只是想知道自己哪里理解错了,谢谢!
pthread_mutex_t mutex[3];
for(i = 0; i<3; i++)
{
pthread_mutex_init(mutex+i,NULL);
pthread_mutex_lock(mutex+i);
err = pthread_create(tid+i, NULL, thread_print, (void *)i);
//err判断省略
}
pthread_mutex_unlock(mutex);
谢谢大家的回答,我没想到会有这么多人帮忙解答,甚至画图写代码来帮我理解,真的非常感谢
每个人的回答和代码我都认真看了一遍,引起我很多的思考,最后也是看懂了,互斥锁是用来处理线程间的问题,不是单个线程的问题,对于单个线程不管加多少把锁不管加在什么地方都没有意义,只要不重复上同一把锁就不可能把自己给锁住,我的疑问主要就是这个,当然也有一些之前一直没有仔细思考的地方也弄清楚了,还有我并不怀疑多线程的并行执行的机制
为了结题我得采纳一个,考虑从最早回答的和最能理解我的问题的症结的大哥里面选一个了,其他各位抱歉了哈,再次感谢!