小弟做的服务器端的一个后台数据服务程序。
服务监听端口,然后为前来访问的客户进行服务
会涉及到多线程,每个为客户端服务的线程都会去记录日志,日志文件是同一个,请问各位大牛,如何实现日志的互斥访问。小弟有一些思路,一是设置一个标志位,来标识文件是否被占用,如果文件被使用,则等待,但我感觉这种方法太2了还有一个方法就是专门有一个日志线程,有一个静态队列,工作线程把日志追加到队列中,日志线程把队列里的数据写到文件坐等高手~!

解决方案 »

  1.   

    线程互斥,就是当一个线程正在使用公共资源,例如:文件,函数等。
    其他线程排队等候。直到当前线程完成工作释放公共资源。
    具体使用技巧:lock,或者mutex
      

  2.   

    不用互斥。
    创建一个写入队列。启动一个线程,当队列有数据就依次取数据写日志。不存在并发。
    你可以参考使用我这个类,直接就可以用带有消息机制的PostMessage方式。每次处理消息即可。消息是排队的,不会并发。带有消息机制的线程 - CustomMessageQueue(c#) 
      

  3.   

    你要写的东西大不? 不大的话就建一个类搞个静态方法负责专门写,注意线程互斥就行了。我们目前跑的程序开了11个线程每天处理50W条以上的记录都没什么问题。static Mutex myMutex = new Mutex();
     static public bool writeLine(string instr,string fileName)
    {
      myMutex.WaitOne();  .......[做文件读写就行了]  myMutex.ReleaseMutex();
    }