C ++两个线程,一个写全局值,一个读全局值,我需要一些锁吗?

时间:2014-01-13 23:20:14

标签: c++ multithreading thread-safety locking

很抱歉,如果之前有人询问,我没有发现任何类似的问题,其中一个线程写入,一个读取 我找到的所有人都阅读。

我读了这么多,如果你有一个线程在另一个线程读取时写一个帖子,你需要某种锁吗?

但我究竟要做什么?,目前我打算在下面这样做。

int test = 0;
bool testBool = false;

void writeThread() {
  while(1) {
    test += 1;
    testBool != testBool;
    Sleep(10); //10 milliseconds wait.
  }
}

void readThread() {
  while(1) {
    int testRem = test % 100;
    if((testRem => 0 && testRem < 20) && testBool) {
      printf("is this fine? test=%d", test);
    }
    Sleep(10); //10 milliseconds wait.
  }
}

CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&writeThread,0,NULL,NULL); 
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&readThread,0,NULL,NULL);

我不担心,如果它错过剩余部分为0,这可能会发生,因为在它读取已经增加超过它的写入之前,但我不担心这个问题抱歉这个坏例子,我只是想确保它不会崩溃,也不会为全局变量提供未定义的行为值。

我将在两个线程中使用bool来指示是否在两个线程内运行代码(读/写线程)。

在第三个帖子中使用GetAsyncKeyState更新的bool用于检测按键。

我必须这样做的原因是因为当我在readThread中运行非常缓慢的延迟按键时,我希望能够在readThread暂停时同时获得新更新的int值延迟按键我可以在一个线程中做,我想通过将更新int值代码放在一个函数我想,但这个更新int值必须每10毫秒运行一次,没有任何暂停。 (如果我不能在没有问题的情况下做两个读/写线程,我可能会选择这条路径。)

只要它在intbool的长时间运行后没有崩溃或给我未定义的行为。那很好

0 个答案:

没有答案