社区
进程/线程/DLL
帖子详情
多线程同步 急
czxooo
2007-01-10 10:12:05
现在有三个线程, A 线程负责与下位机通讯, B线程负责数据分析显示 C 线程负责存储数据
很显然B 和 C 线程 都得依赖于A 线程 取的数据.
也就是说 A 线程 先取得数据 然后 把数据给B 和 C 线程,B 和 C 线程处理完了后 A 线程又 开始取数据 就这样循环下去.
那么如何实现他们之间的同步呢??
看了线程同步的资料,能用事件和临界区同步,但具体如何实现呢?
ps:比较穷,只能给30分,望高手们帮忙
...全文
495
14
打赏
收藏
多线程同步 急
现在有三个线程, A 线程负责与下位机通讯, B线程负责数据分析显示 C 线程负责存储数据 很显然B 和 C 线程 都得依赖于A 线程 取的数据. 也就是说 A 线程 先取得数据 然后 把数据给B 和 C 线程,B 和 C 线程处理完了后 A 线程又 开始取数据 就这样循环下去. 那么如何实现他们之间的同步呢?? 看了线程同步的资料,能用事件和临界区同步,但具体如何实现呢? ps:比较穷,只能给30分,望高手们帮忙
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
EvilLin
2007-01-19
打赏
举报
回复
LZ如果没有解决,给我发邮件,我给你发个例子.makala.cn@gmail.com
EvilLin
2007-01-18
打赏
举报
回复
用这个试试
class MtkMutex
{
friend class MtkGuard;
private:
CRITICAL_SECTION cs_;
public:
inline MtkMutex(void)
{
::InitializeCriticalSection(&cs_);
}
inline ~MtkMutex(void)
{
::DeleteCriticalSection(&cs_);
}
private:
//锁定函数
inline void Lock()
{
::EnterCriticalSection(&cs_);
}
//解锁函数
inline void UnLock()
{
::LeaveCriticalSection(&cs_);
}
};
class MtkGuard
{
private:
int lockCount_;
MtkMutex* pMutexObject_;
public:
MtkGuard(MtkMutex* pMutex, bool bAutoLock = true)
:pMutexObject_(NULL)
,lockCount_(0)
{
pMutexObject_ = pMutex;
if(bAutoLock)
Lock();
}
~MtkGuard()
{
while (lockCount_ > 0)
UnLock();
}
public:
void Lock()
{
if(pMutexObject_)
{
pMutexObject_->Lock();
lockCount_ ++;
}
}
void UnLock()
{
if(pMutexObject_)
{
pMutexObject_->UnLock();
lockCount_ --;
}
}
};
MtkMutex mutex_;
需要同步的地方:
MtkGuard guard(&mutex_);
lock在guard的构造函数里去做
unlock在析构里去搞
函数任何地方都可以随意返回,不用担心unlock
czxooo
2007-01-18
打赏
举报
回复
谢谢你们
还没有实现
老友问题:<
zcp126
2007-01-16
打赏
举报
回复
用event和setevent
guoxd2005
2007-01-16
打赏
举报
回复
建议使用消息队列,A线程把采集到的信息压入到消息队列,B线程从消息队列获取数据,消息队列的同步可以使用条件变量,B和C的通信类似
WingForce
2007-01-15
打赏
举报
回复
HANDLE g_hevt[3];
#define EVT_A 0
#define EVT_B 1
#define EVT_C 2
static void thread_a( void* para )
{
WaitForSingleObject( g_hevt[EVT_A], INFINITE );
/* do something */
SetEvent( g_hevt[EVT_B] );
return;
}
static void thread_b( void* para )
{
WaitForSingleObject( g_hevt[EVT_B], INFINITE );
/* do something */
SetEvent( g_hevt[EVT_C] );
return;
}
static void thread_b( void* para )
{
WaitForSingleObject( g_hevt[EVT_C], INFINITE );
/* do something */
SetEvent( g_hevt[EVT_A] );
return;
}
int main( int argc, char *argv[] )
{
g_hevt[EVT_A] = CreateEvent( NULL, TRUE, FALSE, NULL );
g_hevt[EVT_B] = CreateEvent( NULL, TRUE, FALSE, NULL );
g_hevt[EVT_C] = CreateEvent( NULL, TRUE, FALSE, NULL );
_beginthread( thread_a, 0, NULL );
_beginthread( thread_b, 0, NULL );
_beginthread( thread_c, 0, NULL );
SetEvent( g_hevt[EVT_A] )
/* ... */
system("PAUSE");
return 0;
}
czxooo
2007-01-15
打赏
举报
回复
TO 雨新 初六
用临界区可以同步,但是给出的代码,我的理解是a线程执行完后,b和c线程触发,但是b和c两个线程如何同步。
to 初六
线程a如何同步,我要的是循环的
谢谢各位朋友!
我尝试了几个方法,都没有用:《
望高手们赐教阿
goodmilk
2007-01-14
打赏
举报
回复
用事件Event,让线程B、C等待一个事件,当线程A收到数据,并把数据传给线程B、C后,事件受信,接着线程B、C可以继续进行,否则线程B、C一直等待。
yuxinxxgc
2007-01-13
打赏
举报
回复
CCriticalSection Section;
//A线程
Section.Lock();
for ( int m = 0; m < 10; m++ )
{
//写数据 共享数据区
}
Section.Unlock();
//B,C线呈处理方式
Section.Lock();
//读写数据 共享数据区
Section.Unlock();
WingForce
2007-01-13
打赏
举报
回复
找个用事件的例子来了
HANDLE g_hevt;
static void thread_a( void* para )
{
/* do something */
SetEvent( g_hevt );
return;
}
static void thread_b( void* para )
{
WaitForSingleObject( g_hevt, INFINITE );
/* do something */
return;
}
static void thread_c( void* para )
{
WaitForSingleObject( g_hevt, INFINITE );
/* do something */
return;
}
int main( int argc, char *argv[] )
{
g_hevt = CreateEvent( NULL, TRUE, FALSE, NULL );
_beginthread( thread_a, 0, NULL );
_beginthread( thread_b, 0, NULL );
_beginthread( thread_c, 0, NULL );
/* ... */
system("PAUSE");
return 0;
}
WingForce
2007-01-13
打赏
举报
回复
也可以用消息么
czxooo
2007-01-12
打赏
举报
回复
希望各位赐教阿
oyljerry
2007-01-10
打赏
举报
回复
mutex等
珍惜生命远离CPP
2007-01-10
打赏
举报
回复
ab bc线程之间用一个队列或者什么的东西来交换数据。
交换数据的时候加锁,让ab两个线程只能同时有一个线程读取或者写入
bc线程也一样。
秒杀多线程第九篇 经典
线程同步
总结 关键段 事件 互斥量 信号量
前面《秒杀多线程第四篇一个经典的多
线程同步
问题》提出了一个经典的多
线程同步
互斥问题,这个问题包括了主线程与子线程的同步,子线程间的互斥,是一道非常经典的多
线程同步
互斥问题范例,后面分别用了四篇《秒杀多线程第五篇经典
线程同步
关键段CS》《秒杀多线程第六篇经典
线程同步
事件Event》《秒杀多线程第七篇经典
线程同步
互斥量Mutex》《秒杀多线程第八篇经典
线程同步
信号量Semaphore》来详细介绍常用的
多线程第七篇 经典
线程同步
与互斥总结
前面《多线程二 多线程中的隐蔽问题揭秘》提出了一个经典的多
线程同步
互斥问题,这个问题包括了主线程与子线程的同步,子线程间的互斥,是一道非常经典的多
线程同步
互斥问题范例,后面分别用了四篇 《多线程三 经典
线程同步
之关键段CS》 《多线程四 经典
线程同步
之互斥量Mutex》 《多线程五 经典
线程同步
之事件Event》 《多线程六 经典
线程同步
之信号量Semaphore》
C# 实现多线程的同步方法详解
主要描述在C#中
线程同步
的方法。线程的基本概念网上资料也很多就不再赘述了。直接接入 主题,在多线程开发的应用中,
线程同步
是不可避免的。在.Net框架中,实现
线程同步
主要通过以下的几种方式来实现,在MSDN的线程指南中已经讲了几 种,本文结合作者实际中用到的方式一起说明一下。 1. 维护自由锁(InterLocked)实现同步 2. 监视器(Monitor)和互斥锁(lock)
多线程七 经典
线程同步
与互斥总结
前面《多线程二 多线程中的隐蔽问题揭秘》提出了一个经典的多
线程同步
互斥问题,这个问题包括了主线程与子线程的同步,子线程间的互斥,是一道非常经典的多
线程同步
互斥问题范例,后面分别用了四篇 《多线程三 经典
线程同步
之关键段CS》 《多线程四 经典
线程同步
之互斥量Mutex》 《多线程五 经典
线程同步
之事件Event》 《多线程六 经典
线程同步
之信号量Semaphore》
.NET多
线程同步
方法详解
来自:http://blog.csdn.net/tang280/article/details/5345835 本文主要描述在C#中
线程同步
的方法。线程的基本概念网上资料也很多就不再赘述了。直接接入主题,在多线程开发的应用中,
线程同步
是不可避免的。在.Net框架中,实现
线程同步
主要通过以下的几种方式来实现,在MSDN的线程指南中已经讲了几种,本文结合作者实际中用到的方式一起说明一下。
进程/线程/DLL
15,466
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章