能力值:
( LV5,RANK:70 )
|
-
-
2 楼
线程同步的问题
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
这个是与线程同步没关系的..我试过了!!!
morning 我给写过邮件了..
我的邮箱是:
521141215@qq.com
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
new 分配的空间在堆栈
在不同线程间使用 好像很容易出问题
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我感觉这个说的有道理 ....应该 不是 线程同步那里问题
请问...如果.我想多个线程里访问.这个结构体.我应该怎么操作?
当然.是可以用全局变量 的..
但是.我要做的是.动态申请空间 .
我要根据实际情况.new INFO.然后再建二个线程操作操作这个结构体(如果只有一个线程.会麻烦点)
所以.用一个全局变量 不好弄..如果一定要全局变量.那也只能用 全局的一个数组!!
但是我希望有办法..像这样new 一个空间..传个地址...就搞定.????
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
我觉得还是线程同步的问题
你试着输出日志
INFO *info=(INFO *)l;
这个地方输出 info的值,看是否为同一地址
我认为不会有你说的这种现象..
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
操作系统调度的问题。
最好是用个同步对象。
|
能力值:
( LV3,RANK:30 )
|
-
-
8 楼
多个线程同时读写同一个数据,必定是要同步的,没写同步代码肯定是有问题的,写个代码测试一下就知道了
#include "stdafx.h"
CRITICAL_SECTION cs;
struct ThreadStruct [COLOR="Green"]//线程结构[/COLOR]
{
int nTest;
float fTest;
};
[COLOR="Green"]//线程函数[/COLOR]
DWORD CALLBACK ThreadFun(LPVOID pParam)
{
ThreadStruct* pThreadStruct = (ThreadStruct*)pParam;
EnterCriticalSection(&cs); [COLOR="Green"]//同步好线程[/COLOR]
cout << "nTest:\t" << pThreadStruct->nTest << endl
<< "fTest:\t" << pThreadStruct->fTest << endl;
pThreadStruct->nTest = 5000;
pThreadStruct->fTest = 3.5;
LeaveCriticalSection(&cs);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
InitializeCriticalSection(&cs);
ThreadStruct* pThreadStruct = new ThreadStruct;
pThreadStruct->nTest = 0;
pThreadStruct->fTest = 0;
CreateThread(0, 0, ThreadFun, pThreadStruct, 0, 0);
CreateThread(0, 0, ThreadFun, pThreadStruct, 0, 0);
system("pause");
return 0;
}
|
能力值:
( LV5,RANK:70 )
|
-
-
9 楼
LZ的回复比我详细,用临界段控制不错的
可以考虑在INFO这个结构中封装require,release类的函数,省去在调用方放入同步代码,毕竟数据自身的同步是这个数据对象的事
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
感谢各位的热心回复...
结果是我根据 shizhen 的提示...输出线程地址进行调试..
结果发现.是自己在一个函数中弄错了..访问一切正常了!
上面线程中访问同一个结构是是可以的.
自己大意.呵!谢谢
|
|
|