join和wait的区别
时间: 2023-11-04 22:45:34 浏览: 35
在多线程编程中,join() 和 wait() 都是线程同步的方法,但是它们的使用场景和含义略有不同。
join() 方法是让调用线程等待被调用线程执行完毕后再继续执行。也就是说,调用了 join() 方法后,当前线程会阻塞,直到被调用线程执行完毕,才会继续执行。例如,当主线程创建了一个子线程并调用了子线程的 join() 方法后,主线程会等待子线程执行完毕后再继续执行。
wait() 方法是让线程等待并释放它所持有的锁,从而让其他线程可以获取该锁并执行。当线程调用 wait() 方法时,它会释放它所持有的锁,然后进入等待状态,直到其他线程调用了 notify() 或 notifyAll() 方法,通知该线程可以重新获取锁并执行。
因此,join() 方法适用于等待其他线程执行完毕后再继续执行,而 wait() 方法适用于让线程等待其他线程的通知并释放锁资源。
相关问题
Qt QThread 的wait和join有什么区别
Qt中的QThread类提供了wait()和wait(unsigned long time)方法,以及静态方法msleep(unsigned long msecs),它们都可以使当前线程阻塞一段时间,但wait()和join()的作用不同。
wait()是阻塞当前线程,直到另一个线程结束或调用quit()方法。也就是说,wait()会等待这个线程退出才会结束当前线程的阻塞,如果这个线程一直没有退出,那么wait()方法就会一直阻塞当前线程。wait()方法不会销毁线程对象,仅仅是等待线程退出。
join()是让当前线程等待另一个线程的结束。与wait()不同的是,join()并不会阻塞当前线程,而是会使当前线程等待另一个线程执行完毕后再继续执行。在Qt中,join()方法可以通过QThread::currentThread()调用。join()方法会销毁线程对象,也就是说,一旦线程结束,它就会被销毁。
需要注意的是,如果一个线程被调用了wait()方法,那么它就不能再被调用start()方法启动,否则会抛出一个QThread::IllegalOperation异常。
sleep wait join yield的区别
sleep 是让线程进入睡眠状态,指定时间后线程会自动唤醒,不会释放锁。
wait 是让线程进入等待状态,需要其他线程调用 notify/notifyAll 方法唤醒,会释放锁。
join 是等待其他线程结束,当前线程会被阻塞,直到其他线程结束。
yield 是让出 CPU 时间给其他线程,让其他线程有机会执行。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)