这听起来很理想,但是具有适当锁的真正多线程并保护程序安全,使程序可以平稳运行而又不必担心是否会出现死锁或竞争状况,该怎么办?
只是一些锁,信号灯和大量的时间来考虑一下。

我的意思是,还有什么? 要求它自己进行多线程安全性将是疯狂的。 我们可以从如何锁定程序并防止死锁开始。

什么是正确的多线程以及如何做?

为了不死锁和丢失数据,程序必须达到一定的流程。 当您同时从多个线程访问共享资源时,可能会发生死锁或争用情况 当您使用多线程运行程序时,很难调试确切发生的时间以及哪个线程比其他线程具有访问共享资源的优先级。 这是锁发挥作用的地方,我们使用它们来防止那些相同的死锁。

值得一提的另一件事是上下文切换 是计算机的CPU(中央处理单元)从一个任务(或过程)更改为另一个任务,同时确保任务不冲突的过程。 如果计算机要提供用户友好的多任务处理,则有效的上下文切换至关重要。

让我们更详细地讨论锁。

锁具

有几个不同的锁:

互斥量和条件变量

互斥体

表示互斥并保护由多个线程使用的共享资源。 需要保护共享资源 ,以确保正确地控制正在写入/读取的数据。

正确的多线程:让我们自己回顾一下

用简单的话来说,可以有一个全局变量,并且可以被多个线程访问。 您之所以要锁定它,是因为一个线程可以写而其他线程可以从中读取,但是这需要按一定顺序进行

正确的多线程:让我们自己回顾一下

这就是C语言中互斥锁的工作方式简化示例

正确的多线程:让我们自己回顾一下

有许多与互斥锁控件相关的功能,您可以在此处针对C ++浏览所有这些功能。 锁的大多数功能在所有语言中都是相似的。

条件变量

条件变量允许任意数量的线程等待另一个线程发出条件信号,然后它们才能开始工作。

当调用其等待功能之一时,它使用unique_lock(通过互斥锁)来锁定线程。 该线程将保持阻塞状态,直到被另一个在同一condition_variable对象上调用通知功能的线程唤醒为止。

它可以与互斥锁一起使用,您可以在此处查看所有功能。

结论

这是一个简短的概述,并提醒您使用互斥锁和条件变量锁定程序,以实现完美的多线程。

如果您喜欢这个故事,请 在Medium中 查看我的其他 故事

先前发布在https://towardsdatascience.com/proper-multithreading-have-perfect-multithreading-in-your-program-4cbbf8270af3

From: https://hackernoon.com/proper-multithreading-lets-remind-ourselves-what-it-is-cd8332nf

相关文章:

  • 2021-11-27
  • 2022-12-23
  • 2021-10-13
  • 2021-08-05
  • 2021-12-05
  • 2022-02-07
  • 2021-11-27
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-01-06
  • 2022-12-23
  • 2022-02-02
  • 2021-08-09
  • 2021-03-31
相关资源
相似解决方案