小弟做的服务器端的一个后台数据服务程序。
服务监听端口,然后为前来访问的客户进行服务
会涉及到多线程,每个为客户端服务的线程都会去记录日志,日志文件是同一个,请问各位大牛,如何实现日志的互斥访问。小弟有一些思路,一是设置一个标志位,来标识文件是否被占用,如果文件被使用,则等待,但我感觉这种方法太2了还有一个方法就是专门有一个日志线程,有一个静态队列,工作线程把日志追加到队列中,日志线程把队列里的数据写到文件坐等高手~!
服务监听端口,然后为前来访问的客户进行服务
会涉及到多线程,每个为客户端服务的线程都会去记录日志,日志文件是同一个,请问各位大牛,如何实现日志的互斥访问。小弟有一些思路,一是设置一个标志位,来标识文件是否被占用,如果文件被使用,则等待,但我感觉这种方法太2了还有一个方法就是专门有一个日志线程,有一个静态队列,工作线程把日志追加到队列中,日志线程把队列里的数据写到文件坐等高手~!
其他线程排队等候。直到当前线程完成工作释放公共资源。
具体使用技巧:lock,或者mutex
创建一个写入队列。启动一个线程,当队列有数据就依次取数据写日志。不存在并发。
你可以参考使用我这个类,直接就可以用带有消息机制的PostMessage方式。每次处理消息即可。消息是排队的,不会并发。带有消息机制的线程 - CustomMessageQueue(c#)
static public bool writeLine(string instr,string fileName)
{
myMutex.WaitOne(); .......[做文件读写就行了] myMutex.ReleaseMutex();
}