gpt4 book ai didi

c - 附加到线程内的文件中

转载 作者:行者123 更新时间:2023-11-30 18:12:38 29 4
gpt4 key购买 nike

我编写了以下函数来实现 POSIX 中的两个线程。在每个线程内,我想在每次线程运行时将一行附加到名为“demo.txt”的测试文件中。 但是文件中没有写入任何内容。

我的示例代码片段:

#include<stdio.h>
#include<pthread.h>
#include<stdlib.h>

FILE *fp;
void * threadFunc1(void * arg)
{
int i;
for(i=1;;i++)
{
printf("%s\n",(char*)arg);
fprintf(fp,"Looping %d time in threadfunc1",i);
sleep(1);
}
}

void * threadFunc2(void * arg)
{
int i;
for(i=1;;i++)
{
printf("%s\n",(char*)arg);
fprintf(fp,"Looping %d time in threadfunc2",i);
sleep(1);
}
}


int main(void)
{
pthread_t thread1;
pthread_t thread2;
fp=fopen("demo.txt","a");

char * message1 = "i am thread 1";
char * message2 = "i am thread 2";

pthread_create(&thread1,NULL,threadFunc1,(void*)message1 );
pthread_create(&thread2,NULL,threadFunc2,(void*)message2 );

pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
fclose(fp);
return 0;

}

为什么文件 demo.txt 中没有写入任何内容?如果有什么问题我需要纠正什么?

最佳答案

一般来说,这种场景需要同步机制。该方法取决于您的架构和要求。

您可能需要实现互斥体或信号量。

另一种可能的同步方法是每个线程使用内存映射文件将文件视为共享内存。

如果您的场景需要的读取多于写入,那么最好的同步机制可以基于读取器-写入器锁,因为它允许更多并发读取。

另一种方法可以是具有确保在任何时间点,线程写入文件的不同部分并且不会竞争文件中的相同位置的机制。

关于c - 附加到线程内的文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33198398/

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