7 个解决方案
#1
为什么不用内核对象同步呢,可以设定等待时间
#2
看看windows多线程编程中的线程同步问题吧
#3
使用命名的同步类对象
#4
因为每个进程运行时间不一样,而且每个进程每帧一开始就需要读取别的进程共享的数据,然后进行自己进程的计算,计算完之后再将需要交互的数据进行共享,由于每个进程运行时间不一致,为了保证在读取别的进程共享的数据同时,别的进程没有更新数据,就必须等待每个进程都计算完之后,才能同时共享数据,相当于这个中间有个小的同步,等所有进程共享完数据之后,才能更新总控的状态变量,开始下一帧的计算。需要两次同步,这里都全部使用共享内存来控制,很容易出错,请问有什么好的办法没有来解决这个同步问题。谢谢 各位高手!
#5
因为每个进程运行时间不一样,而且每个进程每帧一开始就需要读取别的进程共享的数据,然后进行自己进程的计算,计算完之后再将需要交互的数据进行共享,由于每个进程运行时间不一致,为了保证在读取别的进程共享的数据同时,别的进程没有更新数据,就必须等待每个进程都计算完之后,才能同时共享数据,相当于这个中间有个小的同步,等所有进程共享完数据之后,才能更新总控的状态变量,开始下一帧的计算。需要两次同步,这里都全部使用共享内存来控制,很容易出错,请问有什么好的办法没有来解决这个同步问题。谢谢 各位高手!
#6
因为每个进程运行时间不一样,而且每个进程每帧一开始就需要读取别的进程共享的数据,然后进行自己进程的计算,计算完之后再将需要交互的数据进行共享,由于每个进程运行时间不一致,为了保证在读取别的进程共享的数据同时,别的进程没有更新数据,就必须等待每个进程都计算完之后,才能同时共享数据,相当于这个中间有个小的同步,等所有进程共享完数据之后,才能更新总控的状态变量,开始下一帧的计算。需要两次同步,这里都全部使用共享内存来控制,很容易出错,请问有什么好的办法没有来解决这个同步问题。谢谢 各位高手!
#7
你需要多个内核对象,
1、每个工作进程有一个标识帧完成的内核对象,
2、总控进程中还有指令每个工作进程可以继续工作的内核对象
3、实际上还需要一个资源锁,工作进程对共享内存进行读写时必需获得锁。
对于工作进程
loop:等待允许工作事件(WaitForSingleObject)
等待资源锁
读入共享数据
计算
写入结果
归还锁
标识 帧完成 设定标识事件,goto loop
对于总控进程
loop: 等待所有工作线程标识事件(WaitForMulitpleObject)
给所有 允许工作事件 标识,
goto loop
1、每个工作进程有一个标识帧完成的内核对象,
2、总控进程中还有指令每个工作进程可以继续工作的内核对象
3、实际上还需要一个资源锁,工作进程对共享内存进行读写时必需获得锁。
对于工作进程
loop:等待允许工作事件(WaitForSingleObject)
等待资源锁
读入共享数据
计算
写入结果
归还锁
标识 帧完成 设定标识事件,goto loop
对于总控进程
loop: 等待所有工作线程标识事件(WaitForMulitpleObject)
给所有 允许工作事件 标识,
goto loop
#1
为什么不用内核对象同步呢,可以设定等待时间
#2
看看windows多线程编程中的线程同步问题吧
#3
使用命名的同步类对象
#4
因为每个进程运行时间不一样,而且每个进程每帧一开始就需要读取别的进程共享的数据,然后进行自己进程的计算,计算完之后再将需要交互的数据进行共享,由于每个进程运行时间不一致,为了保证在读取别的进程共享的数据同时,别的进程没有更新数据,就必须等待每个进程都计算完之后,才能同时共享数据,相当于这个中间有个小的同步,等所有进程共享完数据之后,才能更新总控的状态变量,开始下一帧的计算。需要两次同步,这里都全部使用共享内存来控制,很容易出错,请问有什么好的办法没有来解决这个同步问题。谢谢 各位高手!
#5
因为每个进程运行时间不一样,而且每个进程每帧一开始就需要读取别的进程共享的数据,然后进行自己进程的计算,计算完之后再将需要交互的数据进行共享,由于每个进程运行时间不一致,为了保证在读取别的进程共享的数据同时,别的进程没有更新数据,就必须等待每个进程都计算完之后,才能同时共享数据,相当于这个中间有个小的同步,等所有进程共享完数据之后,才能更新总控的状态变量,开始下一帧的计算。需要两次同步,这里都全部使用共享内存来控制,很容易出错,请问有什么好的办法没有来解决这个同步问题。谢谢 各位高手!
#6
因为每个进程运行时间不一样,而且每个进程每帧一开始就需要读取别的进程共享的数据,然后进行自己进程的计算,计算完之后再将需要交互的数据进行共享,由于每个进程运行时间不一致,为了保证在读取别的进程共享的数据同时,别的进程没有更新数据,就必须等待每个进程都计算完之后,才能同时共享数据,相当于这个中间有个小的同步,等所有进程共享完数据之后,才能更新总控的状态变量,开始下一帧的计算。需要两次同步,这里都全部使用共享内存来控制,很容易出错,请问有什么好的办法没有来解决这个同步问题。谢谢 各位高手!
#7
你需要多个内核对象,
1、每个工作进程有一个标识帧完成的内核对象,
2、总控进程中还有指令每个工作进程可以继续工作的内核对象
3、实际上还需要一个资源锁,工作进程对共享内存进行读写时必需获得锁。
对于工作进程
loop:等待允许工作事件(WaitForSingleObject)
等待资源锁
读入共享数据
计算
写入结果
归还锁
标识 帧完成 设定标识事件,goto loop
对于总控进程
loop: 等待所有工作线程标识事件(WaitForMulitpleObject)
给所有 允许工作事件 标识,
goto loop
1、每个工作进程有一个标识帧完成的内核对象,
2、总控进程中还有指令每个工作进程可以继续工作的内核对象
3、实际上还需要一个资源锁,工作进程对共享内存进行读写时必需获得锁。
对于工作进程
loop:等待允许工作事件(WaitForSingleObject)
等待资源锁
读入共享数据
计算
写入结果
归还锁
标识 帧完成 设定标识事件,goto loop
对于总控进程
loop: 等待所有工作线程标识事件(WaitForMulitpleObject)
给所有 允许工作事件 标识,
goto loop