gpt4 book ai didi

c++ - 多线程全局对象访问

转载 作者:行者123 更新时间:2023-11-28 07:55:43 26 4
gpt4 key购买 nike

好的,我有一个有两个额外线程的应用程序。

线程 1 访问对象 O 并将数据插入作为对象 O 的一部分的双端队列并递增计数器变量。

线程二访问对象 O 并从双端队列中取出并删除数据并递减计数器变量。

这会产生意想不到的结果,因为一个线程告诉我双端队列中有 x 个元素,而另一个线程告诉我没有元素。我假设我必须使用某种同步。我尝试使用信号量,我一定误解了它,因为它不起作用 ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms686946(v=vs.85).aspx )。

所以我想知道如何从两个线程访问一个全局对象。请注意,对全局对象 O 的访问经常发生,因为访问是在 while 循环内进行的,这会导致连续的插入和轮询。 (可能的解决方案是否会阻止其他线程访问对象,从而阻止 while 循环?)

到目前为止,我只知道信号量和互斥量,但从未使用过它们中的任何一种,请大神赐教。

最佳答案

最简单的方法是以独占方式围绕您要使用的代码使用 EnterCriticalSection/LeaveCriticalSection:

CRITICAL_SECTION critSect;

// Later in the code
EnterCriticalSection(&critSect);
// Do stuff with O
LeaveCriticalSection(&critSect);

您当然会在两个线程中都使用它。一次只能有一个线程进入进入/离开区。 EnterCriticalSection 将阻塞,直到另一个线程调用 LeaveCriticalSection

关于c++ - 多线程全局对象访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12772227/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com