传统线程技术回顾
这听起来很理想,但是拥有真正的多线程并带有适当的锁并保护程序安全,使程序可以平稳运行而又不必担心是否会出现死锁或竞争状况,该怎么办?
只是一些锁,信号灯和大量的时间来考虑一下。
我的意思是,还有什么? 要求它自己进行多线程安全性将是疯狂的。 我们可以从如何锁定程序并防止死锁开始。
什么是适当的多线程以及如何做?
为了不死锁和丢失数据,程序必须达到一定的流程。 当您同时从多个线程访问共享资源时,可能会发生死锁或争用情况 。 当您使用多线程运行程序时,很难调试确切发生的情况以及哪个线程比其他线程具有访问共享资源的优先权。 这是锁发挥作用的地方,我们使用它们来防止那些相同的死锁。
值得一提的另一件事是上下文切换 是一个过程,计算机的CPU(中央处理单元)在确保任务不会冲突的同时,从一个任务(或过程)更改为另一个任务。 如果计算机要提供用户友好的多任务处理,则有效的上下文切换至关重要。
让我们更详细地讨论锁。
锁具
有几个不同的锁:
互斥量和条件变量
互斥体
表示互斥并保护由多个线程使用的共享资源。 需要保护共享资源 ,以确保正确地操作正在写入/读取的数据。
用简单的话来说,可以有一个全局变量,并且可以被多个线程访问。 您之所以要锁定它,是因为一个线程可以写而其他线程可以从中读取,但是这需要按一定顺序进行 。
这就是C语言中互斥锁的工作方式简化示例
有许多与互斥锁控件相关的功能,您可以在此处针对C ++浏览所有这些功能。 锁的大多数功能在所有语言中都是相似的。
条件变量
条件变量允许任意数量的线程等待另一个线程发出条件信号,并且它们可以开始工作。
当调用其等待函数之一时,它使用unique_lock(通过互斥锁)来锁定线程。 该线程将保持阻塞状态,直到被另一个在同一condition_variable对象上调用通知功能的线程唤醒为止。
它可以与互斥锁一起使用,您可以在此处查看所有功能。
结论
这是一个简短的概述,并提醒您使用互斥锁和条件变量锁定程序,以实现完美的多线程。
如果您喜欢这个故事,请 在Medium上 查看我的其他 故事 !
先前发布在https://towardsdatascience.com/proper-multithreading-have-perfect-multithreading-in-your-program-4cbbf8270af3
翻译自: https://hackernoon.com/proper-multithreading-lets-remind-ourselves-what-it-is-cd8332nf
传统线程技术回顾