我想知道我的节目是否会出现竞争条件?如果是这样,请举个例子,因为我看不到任何人。
#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;
}
答案 0 :(得分:3)
如果进程中有多个执行线程,并且它们都倾向于(有权访问)操作(读取/更改)共享变量,则会出现竞争条件。
在你的情况下,只有执行中的线程 - main
虽然char *string
被声明为global.Hence没有竞争条件。
要查看操作中的竞争条件,请使用pthread
创建线程。在线程函数中随机访问/更改共享变量(在您的示例中为`char * string)。在执行期间打印值。你会看到影响。
注意:在您的示例中,没有为char *string
分配内存。对此进行strlen
是不正确的。