没有测试环境,故来请教一下,大家说说这样做有同步效果吗?
就是一个CRITICAL_SECTION 在不同线程中多次保护几个不同的变量,比如在线程A中正在执行g_a=10;
线程b的g_b=21能不能执行?
另外推荐点对同步讲得比较深的参考资料吧,很多书在讲同步时都是浅浅地讲一下。线程A
{
EnterCriticalSection(&g_cs);
g_a = 10;
LeaveCriticalSection(&g_cs);
EnterCriticalSection(&g_cs);
g_b = 11
LeaveCriticalSection(&g_cs);
}线程B
{
EnterCriticalSection(&g_cs);
g_b = 21;
LeaveCriticalSection(&g_cs);
EnterCriticalSection(&g_cs);
g_a = 20;
LeaveCriticalSection(&g_cs);
}
就是一个CRITICAL_SECTION 在不同线程中多次保护几个不同的变量,比如在线程A中正在执行g_a=10;
线程b的g_b=21能不能执行?
另外推荐点对同步讲得比较深的参考资料吧,很多书在讲同步时都是浅浅地讲一下。线程A
{
EnterCriticalSection(&g_cs);
g_a = 10;
LeaveCriticalSection(&g_cs);
EnterCriticalSection(&g_cs);
g_b = 11
LeaveCriticalSection(&g_cs);
}线程B
{
EnterCriticalSection(&g_cs);
g_b = 21;
LeaveCriticalSection(&g_cs);
EnterCriticalSection(&g_cs);
g_a = 20;
LeaveCriticalSection(&g_cs);
}
解决方案 »
- 请教各位下面的代码为什么创建(notepad,记事本程序)进程失败了?
- 如何让这段声音提示做到定时关闭?
- 新手菜问题 2
- 关于CListCtrl的Item的问题~~~
- 关于OPENGL中实现倒影的问题!
- 请教高手一个关于directX跨平台的问题
- get_Bookmard 和 put_Bookmark 怎么用?
- 我想在鼠标左键按下时显示一个对话框,但是我在LBUTTONDOWN()中加入了AfxMessageBox("aa");怎么没有反应
- 请教一个函数的用法 AVIStreamCreate
- VC6.0mfc开发
- OleCreatePropertyFrame 的问题
- 如何让窗口不出现Resize的边框而具有Resize的功能?
-->有效果。但是意义何在?比如在线程A中正在执行g_a=10;
线程b的g_b=21能不能执行?
--->不能
线程b的g_b=21能不能执行?
---------------------------
不能执行。可以看Win32多线程程序设计,讲得还是比较清楚的
线程b的g_b=21能不能执行?
-----------
不能执行??
我觉得可以执行吧g_a和g_b是两个不同的资源阿,为什么不行?
如果有两个共享的变量,应该设置两个临界区难道我理解错了?关注一下
按照楼主的写法,g_a=10; 和 g_b=21 是不能同时执行的但是是可以做到同时执行的
对g_a和g_b设置两个不同的临界区这样写就可以了:
线程A
{
EnterCriticalSection(&g_cs1);
g_a = 10;
LeaveCriticalSection(&g_cs1);
EnterCriticalSection(&g_cs2);
g_b = 11
LeaveCriticalSection(&g_cs2);
}线程B
{
EnterCriticalSection(&g_cs1);
g_b = 21;
LeaveCriticalSection(&g_cs1);
EnterCriticalSection(&g_cs2);
g_a = 20;
LeaveCriticalSection(&g_cs2);
}
{
EnterCriticalSection(&g_cs1);
g_a = 10;
LeaveCriticalSection(&g_cs1);
EnterCriticalSection(&g_cs2);
g_b = 11
LeaveCriticalSection(&g_cs2);
}线程B
{
EnterCriticalSection(&g_cs2);
g_b = 21;
LeaveCriticalSection(&g_cs2);
EnterCriticalSection(&g_cs1);
g_a = 20;
LeaveCriticalSection(&g_cs1);
}
线程A
{
EnterCriticalSection(&g_cs);
g_a = 10;
g_b = 11
LeaveCriticalSection(&g_cs);
}线程B
{
EnterCriticalSection(&g_cs);
g_b = 21;
g_a = 20;
LeaveCriticalSection(&g_cs);
}这样就可以有效保护g_a,g_b不能同时被改写了.