|
|
1
0
也许一些演示代码是正确的。假设你有一个这样的块头:
您可以通过向此结构添加互斥变量来保护块:
然后,您需要更新此结构的初始化功能以初始化锁:
X和Y函数(以及 任何 读取或写入块的其他函数则需要取锁并在退出时释放它。
您需要小心确保即使在错误返回路径中也会解锁互斥锁。 |
|
|
2
2
您需要使用互斥锁。 你不应该锁定代码,你应该锁定数据。为每个块创建一个互斥锁,并在函数对块进行操作时将其锁定,然后在完成时将其解锁。 互斥锁是pthread.h和pthread_mutex_t定义的一种类型。提供了锁定和解锁互斥锁的函数。这些函数确保一次只能有一个线程获得一个锁(如果您只是使用一个变量来指示正在使用您的块,那么您将遇到该变量而不是块的并发问题)。 网上有很多教程。谷歌“pthread教程”和你应该找到足够的开始自己。 |
|
|
3
1
使用互斥锁锁定资源(在本例中是内存块)。 或者,您可以锁定函数代码中读取/更新该内存区域的部分。这称为关键部分,需要不同的编码方法。这意味着您的线程可以自由操作,除非它们碰到与资源交互的部分。 第一种方法更容易实现——只是对整个函数X或Y使用all或nothing方法。 |
|
|
4
0
在高级语言中使用多线程编程确实能更好地解决问题。在C语言中有些东西很难理解,在我看来,多线程就是其中之一。我发现Java让我对问题有了更好的感觉。它更容易理解概念和阅读文档。如果Java不是你的东西,那么C++框架如POCO或QT也会更好。 正如其他人所说,从概念上讲,您希望锁定资源(在您的情况下是内存的一部分)。作为一个概念,信号量比互斥量更适合这个问题。我会研究信号量,把互斥量看作是信号量的构建块。如果你问我,互斥量是一个名称不好的二进制信号量。 |
|
|
Sudheera · 更改页面模板时Wordpress模板不可用 3 年前 |
|
|
NBlackout · Eclipse格式。在打开块的大括号之前删除新行 13 年前 |
|
|
Sherifftwinkie · 使用C中的块 13 年前 |
|
|
Alex · 阻止web服务器上的url(websphere) 13 年前 |
|
|
mrN vbence · Magento重新排列块不起作用 13 年前 |
|
|
zitix · 在Magento中的模型方法中获取前端PHTML模板的输出 13 年前 |