产生竞争条件

Producing Race Condition

我正在尝试使用以下示例代码产生竞争条件(假设 csfunc 中存在临界区):

#include <stdio.h>
#include <pthread.h>
  
int cs = 0;

void* csfunc(void* arg){

    for (int i = 0; i < 1000000; i++){

        cs++;
        cs--;

        if (cs!=0){
        
            printf("cs: %d\n", cs);
        }
    }
}
  
  
int main(){
    
    for (int i = 0; i < 100; i++){

        pthread_t t;
        pthread_create(&t,NULL,csfunc,NULL);
        pthread_join(t,NULL);
    }
    return 0;
}

我假设具有 1000000 次迭代的 100 个线程足以处理很多竞争条件。尽管如此,我的代码甚至没有生成 cs 值的一次打印。有任何想法吗?还是我遗漏了什么?

PS> 请注意,我正在使用 gcc 编译器和以下命令

gcc cs.c -lpthread -o cs

当您加入时,它会等到该线程完成,然后继续循环。所以你应该把线程句柄放在一个数组中并等待所有的线程句柄。

pthread_t handles[100];
for (int i = 0; i < 100; i++){
    pthread_create(&handles[i],NULL,csfunc,NULL);
}
for (int i = 0; i < 100; ++i)
    pthread_join(handes[i],NULL);