【发布时间】:2013-02-25 20:29:17
【问题描述】:
std::deque<T> dq;
Thread_function(pointer to queue as argument) // created 8 threads
{
vertext_found = true;
**v is initialized to NULL
while ( i < dq->size())
{
EnterCriticalSection(&h);
if( i < dq.size() ) {
v = dq.at(i); // accessing element of queue without popping
i++;
vertext_found = true;
}
LeaveCriticalSection(&h);
if (vertext_found && (i < dq.size()) && v != NULL)
{
**operation on 'v'
vertext_found = false;
}
}
}
这是否会成为数据竞争条件,尤其是在关键部分之外处理“while (i size())”时?我的方法正确吗?否则请建议我。
【问题讨论】:
-
std::deque<T> dq;真的是本地对象吗?我看到你正在访问它,就好像它是一个指针 (dq->size()) -
看起来您只是从队列中读取。对吗?
-
发布一个更完整的例子。你遗漏了太多信息。您的 dq 似乎是线程本地的,但您的问题暗示它不是。
-
如果 dq 是线程间共享的,那么请说明你是否在访问的同时修改它。如果你有 8 个线程只读取队列而不进行修改,那么你根本不需要同步..
-
我只是在读取队列.. 但需要通过不同的线程访问每个元素.. 是的,我正在将指针传递给队列
标签: c++ multithreading thread-safety deque thread-synchronization