我的想法是不是要在方法开始加锁,方法最后解锁,才不会起冲突,那位慕友帮我解决下!

问题是这样的:有一个方法A(int a)经过方法处理a 后,输出一个值b,我要启动两个线程都去执行它,但是输出的结果比较乱,理想结果应该是 线程1+参数a1得到结果b1,线程2+参数a2得到结果b2,实际的结果是两个线程都输出b2,或a2等等。

慕哥6287543
浏览 129回答 3
3回答

交互式爱情

你参数是通过指针的方法送进去的?然后结果每个线程要读数据的时候数据已经不是送入时候的数据了吗送线程参数的时候,为每个线程分配一个新的空间来保存这个“参数”。例如你原来是int a = 10;_beginthreadex(0, 0, ThreadFunc, &a, 0, 0);a = 20;_beginthreadex(0, 0, ThreadFunc, &a, 0, 0);现在要int a = 10;int *p = new int;*p = a;_beginthreadex(0, 0, ThreadFunc, p, 0, 0);p = new int;a = 20;*p = a;_beginthreadex(0, 0, ThreadFunc, p, 0, 0);记住线程函数退出前要delete掉这个参数p 

慕慕森

这个方法A是否可以做到线程安全?即互不干扰执行?否则加锁,感觉起不到并发的作用。另外,如果这个方法的确无法做到线程安全,建议也只是临界区加锁,即存在冲突的那一段代码加锁,否则影响效率。

largeQ

没听懂你要怎么输出,给你创建临界区的函数:CRITICAL_SECTION m_csList;InitializeCriticalSection(&m_csList);EnterCriticalSection(&m_csList);LeaveCriticalSection(&m_csList);DeleteCriticalSection(&m_csList);
打开App,查看更多内容
随时随地看视频慕课网APP