【问题标题】:Do I need Thread Synchronization, when reading from a shared resource? (C)从共享资源读取时,我需要线程同步吗? (C)
【发布时间】:2020-06-02 11:54:03
【问题描述】:

假设我的程序中有一个全局数组,所以创建的所有线程都可以访问它。或者假设我将它作为参数传递给每个线程(同样的事情,因为它是对数组的引用,所以每个线程都将访问同一个数组)。

我的问题是:

如果我在程序开始时创建这个数组(当没有创建线程时),并将它发送到每个线程,他们只需要从中读取,我需要线程同步吗?

我知道在数组上写入会有问题,但没有线程在数组中写入。他们只阅读它。这就像一个常数。

【问题讨论】:

  • 答案是“不”。您预计会出现什么样的问题?
  • 如果您担心潜在的可见性问题,请参阅cppreference on thrd_create:“此功能的完成与线程的开头同步。”这应该足以保证您在此处描述的用例的可见性。免责声明:当然,cppreference 不是权威来源,因此如果您需要确定,请查看他们所引用的标准部分。

标签: c multithreading synchronization shared


【解决方案1】:

如果您读取全局数组,您可以同时从更多线程访问它,并且不需要任何同步,这就是您需要使用架构并行性的事件。

【讨论】:

  • 您可能要注意,这仅适用于仅从常量数组​​读取的每个线程,术语“访问”是模棱两可的。此外,拥有多个线程不需要并行性,它们只是不能同时运行。即使使用非多处理线程,您也可能会遇到对共享资源进行非原子修改的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 2015-07-21
  • 2014-10-02
  • 1970-01-01
相关资源
最近更新 更多