发布网友 发布时间: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执行它自己的代码,互不影响,他们是同时进行的