了解竞争条件

Understanding 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;
}

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

在您的情况下,只有线程在执行 - main 尽管 char *string 被声明 global.Hence 没有竞争条件。

要查看操作中的竞争条件,请使用 pthread 创建线程。在线程函数 access/change 中随机共享变量(示例中的 `char* 字符串)。在执行期间打印值。您会看到效果。

注意:在您的示例中,没有为 char *string 分配内存。这样做 strlen 是不正确的。