【问题标题】:Threads with independent host environments (c++)具有独立主机环境的线程 (c++)
【发布时间】:2018-11-30 12:15:07
【问题描述】:

我一直在研究这个主题,但我没有找到任何东西。

我有一个代码,我在其中循环一个函数,该函数每次都在不同的线程中 (std::vector<std::shared_ptr<std::thread>>)。

系统工作正常,但是在这个函数里面我要给每个线程一个特定的环境变量值,并且知道std::thread,即使独立运行,宿主环境是共享的,也不可能将此环境变量设置为一个独立的值(如果我使用 setenv() 它会更改为所有线程)。

很遗憾,由于我需要的性质,我无法使用互斥锁解决问题。

所以,这是我的问题。有任何类型的特定线程库(或 std::thread 或 boost 中的隐藏参数)允许我设置线程,为每个线程维护不同的环境变量?

谢谢

【问题讨论】:

  • 为什么每个线程都需要不同的环境变量?应该解决的真正问题是什么?您是否考虑过使用进程而不是线程?
  • 哦,为什么有指向线程的指针?你不能有一个简单的std::vector<std::thread>吗?你真的拥有线程对象的共享所有权(如果你从资源所有权的角度来看智能指针)?
  • 我需要不同的环境变量,因为我将程序作为服务器运行,该服务器具有不同的客户端(每个客户端都有不同的端口),必须链接这些客户端。我有办法在不同的客户端之间重新连接,但是这个过程很慢,不允许我为每个客户端快速更新。 std::shared_ptr 之所以被放置是因为我重用了我的脚本将使用的框架的部分代码。
  • 我仍然完全看不到这里需要环境变量。线程会 readwrite(或两者)环境吗?除非您将其用作一种线程间通信方法,否则编写没有意义,或者您需要启动继承环境的子进程。而且只有读取也没有意义,因为环境在创建进程时设置一次,并且不能在外部修改,然后在进程中的所有线程之间共享。
  • 您希望在环境中存储什么样的数据?您不能在创建数据时将数据传递给每个线程吗(使用 C++ 和 std::thread非常很容易将参数传递给线程函数)?

标签: c++ multithreading environment-variables


【解决方案1】:

线程不可能有不同的环境变量(同一进程中的所有线程共享它们 - 没有办法)。

你为什么需要它?如果它是某个配置值或类似值,那么您可以将其存储在 thread-local 变量中。

如果你真的需要一个单独的环境,你将不得不使用多进程(而不是线程)。

【讨论】:

  • 这就是我的想法。不管怎么说,还是要谢谢你。我看到了几种使用 sh 文件生成多进程的解决方案,但我想要一些能让我在生成特定数量的副本时更有活力的东西。
猜你喜欢
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多