gpt4 book ai didi

c - 在另一个线程中写入文件是否安全?

转载 作者:行者123 更新时间:2023-12-03 13:16:50 24 4
gpt4 key购买 nike

我不知道,如果可以,但是会编译:

typedef struct
{
int fd;
char *str;
int c;
} ARG;

void *ww(void *arg){
ARG *a = (ARG *)arg;
write(a->fd,a->str,a->c);

return NULL;
}


int main (void) {

int fd = open("./smf", O_CREAT|O_WRONLY|O_TRUNC, S_IRWXU);
int ch = fork();

if (ch==0){
ARG *arg; pthread_t p1;
arg->fd = fd;
arg->str = malloc(6);
strcpy(arg->str, "child");
arg->c = 6;

pthread_create( &p1, NULL, ww, arg);
} else {
write(fd, "parent\0", 7);
wait(NULL);
}

return 0;
}

我在父级中是wait()int,但是我不知道我是否还应该 pthread_join来合并线程,或者它是由 wait()隐式包含的。但是,在两个线程中写入同一文件甚至安全吗?我运行了几次,有时输出为1) parentchild,但有时仅输出2) parent,没有其他情况-我不知道为什么当父级wait()用于子级时,子级没有写好。有人可以解释为什么这些输出吗?

最佳答案

您需要在子进程中调用pthread_join(),以避免在子进程退出序列期间出现潜在的竞争状况(例如,子进程否则可以在其线程有机会写入文件之前退出)。在父进程中调用pthread_join()将无济于事,

对于文件来说,两个进程都写入文件不会造成崩溃,这是安全的,但是由于两个进程同时执行,因此将数据写入文件的顺序不确定。

关于c - 在另一个线程中写入文件是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59703931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com