【发布时间】:2015-06-27 15:49:06
【问题描述】:
我想知道我的程序是否可以产生竞态条件?如果是这样,请给我一个例子,因为我看不到任何人。
#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;
}
【问题讨论】:
-
对于竞争条件,您必须有 2 个线程或进程同时访问 1 个对象,并且其中至少有一个想要更改该对象。你能指定你的进程或线程是什么,你的对象是什么?
-
给
int变量名lock,并不能使它成为真正的锁 -
全局变量不在“共享内存”中。
-
为了在两个进程之间共享内存,你必须在linux中使用像
shm_open()这样的函数。 -
@spleeftroner 不,永远不会有。请参阅this 了解详情。
标签: c race-condition