c++ - 我如何在线程之间进行通信

标签 c++ multithreading

<分区>

如何在 C++ 中创建线程并在主线程与另一个线程之间进行通信?

一些代码示例将不胜感激。

最佳答案

线程与其作用域共享变量,这就是互斥锁如此重要的原因。

因此,只需编辑两个线程共有的变量,您就可以非常轻松地进行通信:

#include <iostream>
#include <pthread.h> 
main()  {
    pthread_t f2_thread, f1_thread; 
    void *f2(), *f1();
    int i1;
    i1 = 1;
    pthread_create(&f1_thread,NULL,f1,&i1);
    pthread_create(&f2_thread,NULL,f2,&i1);
    pthread_join(f1_thread,NULL);
    pthread_join(f2_thread,NULL);
}
void *f1(int *x){
  std::cout << *x << std::endl;
}
void *f2(int *x){
  sleep(1)
  std::cout << ++(*x) << std::endl;
}

这应该打印出来:

1
2

并且变量i1已经在线程间共享。这是一种交流形式,您可以共享类、结构字符串,任何您想要的东西。

注意:这段代码几乎肯定会导致线程竞争。这只是一个示例,在线程之间共享内存时,您应该始终使用同步和线程安全实践。

关于c++ - 我如何在线程之间进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12242207/

相关文章:

c++ - 如何使用模板返回 char 值

javascript - 为什么这个 Node.js tcp 服务器在关闭之前不会写回 Java 客户端?

multithreading - 使用QTcpServer/QTcpSocket管理来自单个客户端的并发请求

java - 为什么使用的线程数高于要求?

objective-c - 好奇号: executing code in another thread inside the same method?

c++ - 同一变量的多个值的 If 语句

C++ 程序不从文件中读取字符

c++ - 结构中的 “Incomplete type is not allowed”错误

c++ - 尝试在 PortMidi 中打开输入

windows - 查找另一个线程的线程信息 block