问题动机
我正在使用互斥锁来保护函数中的一些变量,该函数是一组线程的入口点。我认为互斥锁会保护同一范围内的变量,但它会保护函数参数吗?特别是如果参数是指针。
示例代码
编辑: Mutex 在 main 中声明,否则它不起作用 - 我很傻。
我有这样的功能:
void threadfunction(int index, char* const flag)
{
//std::mutex m;
std::lock_guard<std::mutex> lock(m);
// Is this thread safe?
if(*flag) { *flag = 0; index ++; }
}
int main()
{
std::mutex m;
std::vector<std::thread> threadvec;
threadvec.push_back(std::thread(threadfunction)); // Or whatever it is
... join ...
}
我想你可以看到问题:由于参数在互斥锁的同一范围内,我会假设索引是受保护的。但是,虽然我假设存储在 'char* const flag' 中的地址是线程安全的,但我猜 '*flag' 不是。这是正确的,有解决办法吗?
谢谢
PS:对于编辑问题并不得不处理我对 html 的可怕尝试的任何人表示抱歉。