了解竞争条件
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
是不正确的。
我想知道我的程序是否可以产生竞争条件?如果是这样,请给我一个例子,因为我看不到任何人。
#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
是不正确的。