多进程多线程写文件

jianjunlena 2010-06-29 02:23:19
想实现一个记日志(写文本文件)的通用功能,要同时支持多进程,多线程,大家有什么好方法?
...全文
778 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
luciferisnotsatan 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 hanbso 的回复:]

引用 14 楼 skyworth98 的回复:

实现一个日志模块,该模块用一个单独的线程从一个缓冲区中抽取日志项,并写入日志文件。
其它需要写日志的线程,调用日志模块提供的函数,将日志项写入缓冲区。
注意线程同步。

引用楼主 jianjunlena 的回复:
想实现一个记日志(写文本文件)的通用功能,要同时支持多进程,多线程,大家有什么好方法?


这才是正解, 1、互斥……
[/Quote]
+1
hanbso 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 skyworth98 的回复:]

实现一个日志模块,该模块用一个单独的线程从一个缓冲区中抽取日志项,并写入日志文件。
其它需要写日志的线程,调用日志模块提供的函数,将日志项写入缓冲区。
注意线程同步。

引用楼主 jianjunlena 的回复:
想实现一个记日志(写文本文件)的通用功能,要同时支持多进程,多线程,大家有什么好方法?
[/Quote]

这才是正解, 1、互斥;2、信号量;3、事件;4、临界区 满大街都知道,这是处理方法,得告诉别人解决问题的思路,然后再说方法!

具体就是实现一个日志模块,所有进程都是通过这个模块写入日志,当然,可以把此模块放在最常调用写入模块的进程中。各进程调用该同步调用日志模块,方法有互斥、事件;各进程中线程需同步调用该日志模块,也就是很多人说的互斥、信号量、事件、临界区。
will_g 2010-11-09
  • 打赏
  • 举报
回复
对文件写操作时 EnterCritialSection(...) 写完 LevelCritialSection(...)
ostling 2010-11-09
  • 打赏
  • 举报
回复
稍大点规模的日志通常都是按照14楼这种方法做的。应用只管用消息或者日志提供的API往队列、共享内存等缓冲区写入,会有独立的线程专门从缓冲区写文件。其实就是一个异步的过程。




xt0601 2010-06-29
  • 打赏
  • 举报
回复
专业看贴!
cattycat 2010-06-29
  • 打赏
  • 举报
回复
处理好同步就好,注意多线程操作文件的安全性。
do_fork 2010-06-29
  • 打赏
  • 举报
回复
man syslog
tomson_lau 2010-06-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kevin_perkins 的回复:]
这还是一个多线程编程中的同步问题。当进行写操作时,要对缓冲加保护,避免同时写入。
线程同步的四种方法:1、互斥;2、信号量;3、事件;4、临界区。
任选其一,对缓冲保护,应该没有问题。
[/Quote]

正解
bobo364 2010-06-29
  • 打赏
  • 举报
回复
用c语言写个文件,用不着大费周章的去搞多线程吧


关于c的多线程编程:在VC++6.0中,有两种多线程编程方法:一是使用C运行时库及WIN32 API函数,另一种方法是使用MFC,MFC对多线程开发有强大的支持。


如果不使用VC多线程C运行时库来生成多线程程序,必须执行下列操作:

  (1)使用标准 C 库(基于单线程)并且只允许可重入函数集进行库调用;

  (2)使用 Win32 API 线程管理函数,如 CreateThread;

  (3)通过使用 Win32 服务(如信号量和 EnterCriticalSection 及 LeaveCriticalSection 函数),为不可重入的函数提供自己的同步。
wzywsk 2010-06-29
  • 打赏
  • 举报
回复
可以去Windows专区问问
别逗我乐 2010-06-29
  • 打赏
  • 举报
回复
再顶一下,
[Quote=引用 4 楼 longfeihufengyun 的回复:]
顶一下,说的很好。

引用 2 楼 kevin_perkins 的回复:
这还是一个多线程编程中的同步问题。当进行写操作时,要对缓冲加保护,避免同时写入。
线程同步的四种方法:1、互斥;2、信号量;3、事件;4、临界区。
任选其一,对缓冲保护,应该没有问题。
[/Quote]
太乙 2010-06-29
  • 打赏
  • 举报
回复
单例模式+一个静态的锁
AlanBruce 2010-06-29
  • 打赏
  • 举报
回复
LZ应该说清楚;
多线程的支持是指对日志的多线程处理,避免其他进程进行日志调用的时候阻塞

多进程的支持是指其他进程能够并发访问该日志进程

那么难点应该是进程间通信 和线程之间的同步

进程通信有很多方法:WIN32下有管道、LPC。。。。甚至你可以用SOCKET、共享内存

线程同步在于你对临界资源的处理,准确把握好哪些是多线程中可能冲突的资源直接关系着你的代码能否正确高效的执行。。
blh 2010-06-29
  • 打赏
  • 举报
回复
可以使用互斥量
另外你的需求不明,不知道你准备是现成什么样
skyworth98 2010-06-29
  • 打赏
  • 举报
回复
实现一个日志模块,该模块用一个单独的线程从一个缓冲区中抽取日志项,并写入日志文件。
其它需要写日志的线程,调用日志模块提供的函数,将日志项写入缓冲区。
注意线程同步。

[Quote=引用楼主 jianjunlena 的回复:]
想实现一个记日志(写文本文件)的通用功能,要同时支持多进程,多线程,大家有什么好方法?
[/Quote]
DontKissBossAss 2010-06-29
  • 打赏
  • 举报
回复







问题
longfeihufengyun 2010-06-29
  • 打赏
  • 举报
回复
顶一下,说的很好。
[Quote=引用 2 楼 kevin_perkins 的回复:]
这还是一个多线程编程中的同步问题。当进行写操作时,要对缓冲加保护,避免同时写入。
线程同步的四种方法:1、互斥;2、信号量;3、事件;4、临界区。
任选其一,对缓冲保护,应该没有问题。
[/Quote]
Subye 2010-06-29
  • 打赏
  • 举报
回复
主要还是处理好线程同步的问题就好。
Kevin_Perkins 2010-06-29
  • 打赏
  • 举报
回复
这还是一个多线程编程中的同步问题。当进行写操作时,要对缓冲加保护,避免同时写入。
线程同步的四种方法:1、互斥;2、信号量;3、事件;4、临界区。
任选其一,对缓冲保护,应该没有问题。
jianjunlena 2010-06-29
  • 打赏
  • 举报
回复
先所下,我这个是在Linux下运行的东西。我所说的支持多进程和支持多线程意思是,有多个进程写这个文件,每个进程中又有多个线程写这个文件。所以要同时控制多进程和多线程的同步。所以看看有什么好办法没有?
加载更多回复(1)

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧