线程如何同步它们的操作?

How can threads synchronize their operation?

线程如何同步它们的操作?由于同一进程中的线程共享资源,线程如何以不干扰其他线程的方式运行?请用通俗易懂的语言解释。感谢所有专家!

想象一扇狭窄的门,人们一次只能通过这扇门。有时候人多了,就排起了长队。正确编程的线程也是如此——它们遵守惯例,比如在门被占用时不要试图通过。编程不好的线程,以及不礼貌的人,都会无视约定而造成混乱。

多线程编程中的主要抽象是资源——最多可以属于一个线程的内存区域。线程请求资源,等待它们,拥有它们 - 并且只有在欠款时才能读取或写入该内存 - 并释放它们。

有许多用于处理资源的同步原语,最重要的是信号量、监视器和阻塞队列。

想设计多线程程序的程序员,首先应该规划好使用什么样的资源,以及线程如何交换这些资源。然后选择要使用的标准同步设施,或设计新设施并对其进行编程。专门的设施通常带有监视器。

多线程编程的教学通常从如何使用监视器进行线程交互开始。这是错误的。学生首先要掌握标准手段——信号量和阻塞队列的使用,这足以应对95%的情况,然后才学会使用监视器设计专门的设施。