了解竞争条件

时间:2015-04-20 18:49:52

标签: c race-condition

我想知道我的节目是否会出现竞争条件?如果是这样,请举个例子,因为我看不到任何人。

#define STRING_SIZE 1024
char *string; 
int main(int argc,char**argv){
 int length; 
 if(argc != 2) return ;
 length = strlen(string);
 strncpy(string+length,argv[1],STRING_SIZE,STRING_SIZE-length);
return 0;

}

如果我锁定怎么办?这是否纠正了这个问题?

#define STRING_SIZE 1024
int lock;
char *string; 
int main(int argc,char**argv){
 int length; 
 while(lock != 0){}
 lock = 1;
 if(argc != 2) return ;
 length = strlen(string);
 strncpy(string+length,argv[1],STRING_SIZE,STRING_SIZE-length);
 lock = 0;
 return 0;
}

1 个答案:

答案 0 :(得分:3)

如果进程中有多个执行线程,并且它们都倾向于(有权访问)操作(读取/更改)共享变量,则会出现竞争条件。

在你的情况下,只有执行中的线程 - main虽然char *string被声明为global.Hence没有竞争条件。

要查看操作中的竞争条件,请使用pthread创建线程。在线程函数中随机访问/更改共享变量(在您的示例中为`char * string)。在执行期间打印值。你会看到影响。

注意:在您的示例中,没有为char *string分配内存。对此进行strlen是不正确的。