linux中,多线程互斥锁问题

发布网友 发布时间:2022-04-22 22:55

我来回答

5个回答

热心网友 时间:2023-07-13 15:24

线程一:
pthread_mutex_lock(&mutex);
线程一锁中做的事
pthread_mutex_unlock(&mutex);
线程一锁外做的事

线程二:
pthread_mutex_lock(&mutex);
线程二锁中做的事
pthread_mutex_unlock(&mutex);
线程二锁外做的事

当线程一二同时加锁时,只有一个获得锁(比如线程一),并开始处理锁中做的事,此时线程二被挂起。当线程一释放锁后,线程一将继续做锁外做的事,而线程二加锁做锁中做的事,再解锁做锁外做的事。追问就是说,锁跟线程获得时间片没什么关系?线程解锁后还会继续运行?

追答linux在不停的做线程切换,线程解锁后只要没有什么需要长时间挂起的操作(比如usleep、锁等),就会继续运行。

热心网友 时间:2023-07-13 15:24

线程一会继续执行,线程二此时等到了锁,所以也开始执行,即线程一,二同时在运行。

热心网友 时间:2023-07-13 15:25

1.在内核支持抢占的前提下,这根线程的优先级有关。
如果thread2的优先级高于thread1,就会先去去执行thread2!

2.不抢占的情况下,线程一解锁后,printf("thread 1....");会接着执行!

热心网友 时间:2023-07-13 15:25

当然会,不是临界资源,执行顺序是随机的,但是一定会执行追问再比如,现在是两线程不加锁。线程一sleep(2),那么线程二就会运行。那此时线程一马上就sleep2秒还是等线程二运行一段时间再sleep?

热心网友 时间:2023-07-13 15:26

线程之间是并发运行的,所以锁解除后,各个线程都会继续执行,互不影响追问再比如,现在是两线程不加锁。线程一sleep(2),那么线程二就会运行。那此时线程一马上就sleep2秒还是等线程二运行一段时间再sleep?

追答如果没有锁,两个线程是并发执行,也就是说线程一在执行sleep(2),而线程2执行它自己的代码,互不影响,他们是同时进行的

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com