请教各位.谢了先

birdinfly 2001-09-04 08:04:34
A,B,C三个线程,A中的func()中动态申请了g_pA1,g_pA2变量
等指向几块内存区域,并写入一定的数据.
B调用外部函数func()时希望申请到的g_pA1,g_pA2只在B中有效,
C调用func()时也希望申请到的g_pA1,g_pA2只在C中有效,不受B中调用func()的干扰,
我应该怎么来做?谢谢
...全文
74 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
cgaga 2001-09-04
  • 打赏
  • 举报
回复
对此类问题有两种解决办法
1。使用线程本地存储区域,具体方法是
a.使用DWORD TlsAlloc()分配一个线程本地存储区索引
b.使用BOOL TlsSetValue(DWORD dwTlsIndex, LPVOID lpTlsValue);将你的变量绑定到此索引
c.使用 LPVOID TlsGetValue(DWORD dwTlsIndex);获取域一个索引相关的变量
d.如果不在需要此索引了,使用BOOL TlsFree(DWORD dwTlsIndex);释放索引

此种方式由个局限,即每个线程可分配的索引数是有限定的nt4.0以前为64个,2000中是1088个



2。使用线程相关类
可以为每个线程定义如下一个类,每个线程对应一个类,
现程函数即类成员函数,这样每个线程访问的都是本线程相关的数据

如定义如下的类


class CMyThread{
public:
int* m_pA1;
int* m_pA2;
BOOL StartThread(){
_beginthread(_ThreadProc,0,this);//关键:将自身做为线程创建参数传入线程中

}

private:
void ThreadProc(){
这里是实际的线程函数,可以访问此线程关联的类中的所有成员

}

//线程函数必须是全局函数或类静态成员函数
static void _ThreadProc(void *pParam){
//pParam即传入的this
((CMyThread *)pParam)->ThreadProc();
}

};

我个人比较喜欢下面这种,他和c++结合的较好,而且效率要比前一种高










dongyingtao 2001-09-04
  • 打赏
  • 举报
回复
我想你需要定义线程本地存储区域,可以利用Win32 API的TlsAlloc申请

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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