社区
进程/线程/DLL
帖子详情
文件的读写互斥实现有好想法的进!
lxhvc
2004-01-06 11:56:54
课程设计要做一个文件系统的读写进程互斥,不知如何下手,请教高手指点!
具体要求,随机产生读或写进程,做到:
1。“写-写”互斥
2。 “读-读”允许
3。 “读-写”互斥
...全文
317
4
打赏
收藏
文件的读写互斥实现有好想法的进!
课程设计要做一个文件系统的读写进程互斥,不知如何下手,请教高手指点! 具体要求,随机产生读或写进程,做到: 1。“写-写”互斥 2。 “读-读”允许 3。 “读-写”互斥
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
vcforever
2004-01-07
打赏
举报
回复
下面是我写的一个简单的三个线程同时写一个文件的例子
1、在对话框的头文件中定义如下函数和变量
static unsigned __stdcall ThreadThird(LPVOID lparam);
static unsigned __stdcall ThreadTwo(LPVOID lparam);
static unsigned __stdcall ThreadOne(LPVOID lparam);
unsigned hThreadOneId;
unsigned hThreadTwoId;
unsigned hThreadThirdId;
HANDLE hThread[3];
CStdioFile file;
HANDLE hMutex;
2、在OnInitDialog()中打开一个文件,用于三个线程同时写入
//打开文件
if(!file.Open("C:\\test.txt",CFile::modeRead | CFile::modeWrite))
file.Open("C:\\test.txt",CFile::modeRead | CFile::modeWrite | CFile::modeCreate);
3、在一个按钮函数中启动三条线程
//按钮函数
//start three thread
void CMultithreadDlg::OnBtnstart()
{
hMutex = ::CreateMutex(NULL,FALSE,NULL);
hThread[0] = (HANDLE)_beginthreadex(NULL,0,ThreadOne,this,0,&hThreadOneId);
hThread[1] = (HANDLE)_beginthreadex(NULL,0,ThreadTwo,this,0,&hThreadTwoId);
hThread[2] = (HANDLE)_beginthreadex(NULL,0,ThreadThird,this,0,&hThreadThirdId);
WaitForMultipleObjects(3,hThread,TRUE,INFINITE);
for(int i = 0; i < 3; i++)
CloseHandle(hThread[i]);
ReleaseMutex(hMutex);
CloseHandle(hMutex);
MessageBox("all thread finished!\n and Mutex has released success",
"Notice",
MB_ICONINFORMATION | MB_OK);
}
下面是三个线程函数,用于向文件中写入数据
//第二条线程
unsigned __stdcall CMultithreadDlg::ThreadTwo(LPVOID lparam)
{
CMultithreadDlg *pSDlg = (CMultithreadDlg*)lparam;
pSDlg->file.SeekToEnd();
for(int i = 10; i < 20; i++){
WaitForSingleObject(pSDlg->hMutex,INFINITE);
char temp[10] = {0};
itoa(i,temp,10);
strcat(temp,"\n");
pSDlg->file.WriteString(temp);
ReleaseMutex(pSDlg->hMutex);
}
return 0;
}
//第三条线程
unsigned __stdcall CMultithreadDlg::ThreadThird(LPVOID lparam)
{
CMultithreadDlg *pTDlg = (CMultithreadDlg*)lparam;
pTDlg->file.SeekToEnd();
for(int i = 20; i < 30; i++){
WaitForSingleObject(pTDlg->hMutex,INFINITE);
char temp[10] = {0};
itoa(i,temp,10);
strcat(temp,"\n");
pTDlg->file.WriteString(temp);
ReleaseMutex(pTDlg->hMutex);
}
return 0;
}
在对话框关闭的时候关闭文件
void CMultithreadDlg::OnClose()
{
file.Close();
CDialog::OnClose();
}
上面只是一个简单测试多条线程向同一文件中同时写入时的同步,读文件的方法和写的一样,只要处理好同步就可以了!
希望对楼主有所帮助!
sharkhuang
2004-01-07
打赏
举报
回复
solaris和java现在都支持写优先多读单写锁!完全符合你的要求!呵呵
Semigod
2004-01-07
打赏
举报
回复
其实在Windows平台下,打开文件时,只要是ShareRead方式打开就可以像你所说的那样操作了,系统会自动实现你所谓的互斥功能的
victor_cui
2004-01-07
打赏
举报
回复
这是一个典型的读写锁实现的案例,对于unix或者linux平台,我们可是使用phtread_rwlock_t来实现线程间的互斥锁,配合共享内存就可以实现进程间互斥了
而对于windows平台则可以通过内核对象Mutex或者信号量实现自己的读写锁。
这样就可以把你的文件操作和读写锁封装在一起,实现一个你自己的文件操作类了
操作系统课程设计报告
实现
多线程通信同步
互斥
内存管理
文件
管理
- **4.4 动态链接库设计**: 创建动态链接库(DLL)
文件
以
实现
代码的复用和优化。 - **4.5
进
程通信的同步/
互斥
问题**: 为了确保资源共享的正确性和安全性,报告采用了信号量Semaphone机制、临界区和
互斥
量Mutex等方法...
操作系统实训+源代码
操作系统实训是计算机科学与技术专业的重要...同时,这也是一个很好的平台,让学习者能够尝试
实现
自己的创新
想法
,如优化调度算法、改
进
内存管理策略等。在实践中,应注重代码的可读性和模块化设计,以便于理解和维护。
ceph知识树.pdf
- **PageCache和BufferCache**:用于提高
文件
读写
性能。 - **内存信息查看命令**:如free、vmstat等。 **
进
程管理:** - **ps/top/kill/pkill/mpstat命令的使用**:管理
进
程。 - **
进
程同步机制**:
互斥
锁、信号量...
想法
存储区:个人
想法
配置
4. **IO流**:
文件
读写
、网络通信等,掌握InputStream和OutputStream家族,以及Reader和Writer系列。 5. **多线程**:学习如何创建和管理线程,理解同步和
互斥
机制,如synchronized关键字和Lock接口。 6. **设计...
C#精典实例程序1-50
7. **
文件
与I/O操作**:
文件
读写
是常见的需求,实例可能涵盖Stream、StreamReader、StreamWriter等类的使用,以及XML和JSON的序列化与反序列化。 8. **GUI编程**: 如果包含Windows Forms或WPF应用,实例可能涉及到...
进程/线程/DLL
15,473
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章