多个线程同时对一个链表进行操作,如何进行加锁解锁,不加锁解锁的话,很容易出问题

wang7890 2008-07-24 11:29:19
多个线程同时对一个链表进行 添加/删除操作,如何进行加锁解锁,不加锁解锁的话,很容易出问题

请问,如何进行加锁/解锁,

请大家给一个例子! 谢谢! 最好是代码

谢谢大家!
...全文
658 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sansky99 2008-07-25
  • 打赏
  • 举报
回复

CRITICAL_SECTION criticalSection
InitializeCriticalSection(&criticalSection);

void List_AddItem(...)
{
EnterCriticalSection(&criticalSection);
...
LeaveCriticalSection(&criticalSection);
}

void List_DeleteItem(...)
{
EnterCriticalSection(&criticalSection);
...
LeaveCriticalSection(&criticalSection);
}
独孤过儿 2008-07-25
  • 打赏
  • 举报
回复
<Win32多线程程序设计> 网上有电子版的...
wang7890 2008-07-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fibbery 的回复:]
如果是自己写的链表,并且该链表多用于多线程编程中,那么应该在链表的方法中加入锁机制,也就是内部锁;
如果该链表不是自己写的类或者该类可能用于其它非并行编程中,那应该在客户代码中实行加锁机制,即凡是在多线程中使用该链表的客户代码,都要自行加锁,即外部加锁。
[/Quote]

希望能给一个简单的例子, 看代码比较直接点。
fibbery 2008-07-24
  • 打赏
  • 举报
回复
如果是自己写的链表,并且该链表多用于多线程编程中,那么应该在链表的方法中加入锁机制,也就是内部锁;
如果该链表不是自己写的类或者该类可能用于其它非并行编程中,那应该在客户代码中实行加锁机制,即凡是在多线程中使用该链表的客户代码,都要自行加锁,即外部加锁。
iBug168 2008-07-24
  • 打赏
  • 举报
回复
如果是同一个进程...
临界区应该比较简单.

就是把对list的操作全部封装成方法,然后在这些个方法的入口加锁,出口解锁即可.

如果是多个进程...
那就用信号量吧.
mutex...

建议google,或者baidu

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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