Clang ThreadSanitizer обнаруживает только одну гонку данных на поток - PullRequest
0 голосов
/ 04 марта 2020

Представьте для этого кода:

#include <pthread.h>


int Global;

void *Thread1(void *x) {
  Global=Global+1;
  return x;
}

void *Thread2(void *x) {
  Global=Global+1;
  Global++;
  return x;
}

int main() {
  pthread_t t1,t2;
  pthread_create(&t1, NULL, Thread1, NULL);
  pthread_create(&t2, NULL, Thread2, NULL);
  pthread_join(t1, NULL);
  pthread_join(t2, NULL);
  return 0;
}

В Thread2 есть две гонки данных 1) Global = Global + 1; 2) Global ++;

Но Цан всегда обнаруживает только одну расу из этого потока. (Он обнаружит 1 или 2 как расу, но не обе сразу). Есть ли способ обнаружить все расы в потоке? Или это просто ограничение Цана?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...