作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个多线程程序,可以模拟主题公园,并将日志消息写入给定的文本文件。我最初尝试让每个线程写入文件,但我在访问文件指针的线程中遇到了错误。
相反,建议我使用专用线程进行写入,并以所有其他方法写入缓冲区,然后该特定线程将写入文件。显然,我需要一个互斥体来同步对缓冲区的访问,但是有没有一种方法可以在每次缓冲区写入后首先向写入线程发出信号,以便它有机会在互斥体向每个尝试执行此操作的方法发出信号之前将缓冲区写入文件写入缓冲区?
最佳答案
我通过使用 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/
我是一名优秀的程序员,十分优秀!