两个线程同时对文件进行读/写(互斥没有帮助)

时间:2012-01-02 15:22:22

标签: multithreading redirect

我想通过使用tshark实用程序(使用system()命令)使用一个线程来获取数据包字段,然后将输出重定向到文件。同一个文件需要同时由另一个线程读取,以便它可以根据文件中观察到的字段做出运行时决策。

我现在遇到的问题是即使第一个线程正在写入文件,第二个线程也无法读取它(它从文件中读取NULL)。我不确定为什么它会这样做。我认为这可能是由于同时访问同一个文件。我想过使用互斥锁但会阻塞读取线程,因为第一个线程只会在程序终止时结束。

关于如何去做的任何想法?

1 个答案:

答案 0 :(得分:2)

如果您正在使用该文件进行进程间通信,则可以改为使用命名管道或消息队列。它们更容易使用,不需要同步,因为一个线程写入,另一个线程在数据可用时读取。

编辑:对于线程间通信,您可以简单地使用共享变量和条件变量来指示何时生成某些数据(生产者 - 消费者模式)。类似的东西:

// thread 1
while(1)
{
   // read packet
   // write packet to global variable
   // signal thread 2
   // wait for confirmation of reading
}

// thread 2
while(1)
{
   // wait for signal from thread 1
   // read from global variable
   // signal thread 2 to continue
}

信号部分可以用条件变量实现:pthread_cond_t