社区
C语言
帖子详情
多进程多线程写文件
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)
Python之
多进程
与
多线程
前言:为什么有人说 Python 的...2、为什么在Python里面推荐使用
多进程
而不是
多线程
? 1 基础知识 现在的PC都是多核的,使用
多线程
能充分利用CPU来提供程序的执行效率。 1.1 线程 线程是一个基本的CPU执行单元。...
解决
多进程
或
多线程
同时读
写
同一个
文件
的问题
本文介绍一种在PHP中解决
多进程
或
多线程
同时读
写
同一个
文件
的问题。
python
多进程
和
多线程
一起使用_Python干货:
多进程
与
多线程
!
今天我们来聊聊Python里面的
多进程
与
多线程
编程模式。01
多线程
工作在开始讲今天的正文之前,先给大家介绍一个概念「
多线程
工作」,这个概念可能有的人听过,也可能有的人平常工作中就是这么做的。我再来给大家讲讲...
多进程
与
多线程
区别
在Unix上编程采用
多线程
还是
多进程
的争执由来已久,这种争执最常见到在C/S通讯中服务端并发技术 的选型上,比如WEB服务器技术中,Apache是采用
多进程
的(perfork模式,每客户连接对应一个进程,每进程中只存在唯一一...
Python
多线程
+
多进程
简单使用教程,如何在
多进程
开
多线程
关于python
多进程
多线程
的相关基础知识,在我之前的博客有
写
过,并且就关于python
多线程
的GIL锁问题,也在我的一篇博客中有相关的解释。 为什么python
多线程
在面对IO密集型任务的时候会产生加速作用? 为什么python...
C语言
69,370
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章