c++ - 线程设计和设计以及在 C++ Win32 中从另一个线程中调用一个函数

标签 c++ multithreading winapi

假设您在 Win32 中有两个线程。假设主 UI 线程启动工作线程 A。假设当创建线程 A 时,指向主线程中某个类的指针被发送到线程 A。在处理过程中的某个时刻,线程 A 调用主线程中的函数通过指针线程。线程A和主线程永远不会争用同一个数据,也不会同时调用同一个函数。

这是不好的做法吗?

如果是,那么该功能的正确设计是什么。线程 A 需要访问主线程中的函数,比如访问保存在主线程中的数据。可以预期,当主线程访问数据时,线程 A 永远不会调用主线程中的函数。这样就不会有数据争用。但是,当线程a还在调用主线程中的函数时,主线程可能会再次启动。

只要不存在数据争用并且被调用的函数是可重入的,这是否重要或者通常可以在其他线程中调用函数?

最佳答案

线程在进程中是全局的,在所有线程之间共享。没有“主线程中的函数”之类的东西。

重要的是如何共享数据。函数由两部分组成:代码本身和它所操作的数据。

一般来说,代码是静态的。这就是代码在线程之间自由共享的原因。从来没有任何争论。

不过,对于数据来说,情况就不同了。您需要确保在多个线程之间共享的任何数据上没有不正确的争用。只要您对此感到满意,那么从多个线程调用同一个函数就可以了。

关于c++ - 线程设计和设计以及在 C++ Win32 中从另一个线程中调用一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22854557/

相关文章:

c++ - 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?

c++ - 用于解析 C++ 中重复日期描述的库?

c - 右键单击 WinAPI 上下文菜单

c++ - 打印作业时,最后的作业状态是 JOB_STATUS_PAUSED,而不是 JOB_STATUS_PRINTED

c++ - 两阶段函数模板编译 : not *only* ADL is employed in the 2nd phase?

c# - 多线程计算从多个文件加载数据。如何在 C# 中使用和同步 StreamReader?

ios - EAGLContexts 共享 EAGLSharegroup 在子类化 GLKView 时给出错误

java - 如何在后台线程中正确停止 sikuli?

c++ - Windows 8 下的 GetVersionEx

C++:当不是所有的派生类都预先知道时使用继承?