产生竞争条件
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);
我正在尝试使用以下示例代码产生竞争条件(假设 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);