【发布时间】: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 之所以被放置是因为我重用了我的脚本将使用的框架的部分代码。
-
我仍然完全看不到这里需要环境变量。线程会 read 或 write(或两者)环境吗?除非您将其用作一种线程间通信方法,否则编写没有意义,或者您需要启动继承环境的子进程。而且只有读取也没有意义,因为环境在创建进程时设置一次,并且不能在外部修改,然后在进程中的所有线程之间共享。
-
您希望在环境中存储什么样的数据?您不能在创建数据时将数据传递给每个线程吗(使用 C++ 和
std::thread非常很容易将参数传递给线程函数)?
标签: c++ multithreading environment-variables