c - 使用专用线程进行文件输出

标签 c multithreading file-io mutex

我有一个多线程程序,可以模拟主题公园,并将日志消息写入给定的文本文件。我最初尝试让每个线程写入文件,但我在访问文件指针的线程中遇到了错误。

相反,建议我使用专用线程进行写入,并以所有其他方法写入缓冲区,然后该特定线程将写入文件。显然,我需要一个互斥体来同步对缓冲区的访问,但是有没有一种方法可以在每次缓冲区写入后首先向写入线程发出信号,以便它有机会在互斥体向每个尝试执行此操作的方法发出信号之前将缓冲区写入文件写入缓冲区?

最佳答案

我通过使用 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);

关于c - 使用专用线程进行文件输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36053224/

相关文章:

javascript - OS.File 在 OS.read 之前检查最后修改日期

c# - 如何使用 System.IO.Directory.GetFiles 递归枚举文件+文件夹

c - 建立连接时的OpenSSL各种数字包(PSH)

具有消费者完成通知的 Java 生产者消费者模式

c++ - Qt:qthread 在关闭期间线程仍在运行时被销毁

vim - 如何设置打开文件时默认展开?

c - 求余数时带空格的逻辑

c - memcpy 在不同的编译器中给出不同的输出

c - K&R malloc 代码没有意义?

.net - 杀死线程后如何分配内存?