我有一个模拟主题公园的多线程程序,并将日志消息写入给定的文本文件。我最初尝试让每个线程都写入该文件,但是我遇到了访问文件指针的线程的错误。
相反,我建议使用专用线程进行写入,然后在该特定线程将写入文件的所有其他方法中写入缓冲区。显然我需要一个互斥锁来同步对缓冲区的访问,但是有一种方法可以在每次缓冲区写入之后首先发出写入线程的信号,这样它就有机会在向每个尝试的方法发出信号之前将缓冲区写入文件。写入缓冲区?
答案 0 :(得分:0)
我使用2个互斥锁解决了我的问题。第一个在执行开始时被锁定。当写入缓冲区时,第二个被锁定。一旦写入完成,第一个互斥锁就会被解锁,这允许线程写入输出。一旦它写入输出它解锁第二个互斥锁,所以其他东西可以写入缓冲区。
输出线程:
void *output_logging(void *path)
{
while(END)
{
FILE *write = fopen(path, "w+");
while(1)
{
pthread_mutex_lock(&tlock);
fputs(BUFFER, write);
pthread_mutex_unlock(&write_lock);
}
}
}
和写一个例子:
pthread_mutex_lock(&write_lock);
sprintf(BUFFER, "Beginning of Simulation\n");
pthread_mutex_unlock(&tlock);