【发布时间】:2013-08-09 04:11:53
【问题描述】:
我有一个回调函数,它将在我没有任何访问或控制权的线程中调用(一个库创建了该线程,并要求我将回调函数公开给该线程)。由于 zmq 套接字不是线程安全的,这就是我正在做的事情:
void callback () {
zmq::socket_t tmp_sock(...); // create a socket which will be used only once
...
}
但是,回调被非常频繁地调用(每秒数百次)。有没有更好的解决方案来更有效地使用套接字?我问这个是因为指南说:如果你打开和关闭了很多套接字,这可能表明你需要重新设计你的应用程序。
编辑:
基于@raffian 的回答。回调函数中的 thread_local static(在 C++11 中可用)变量可以正常工作。
【问题讨论】:
-
我也有类似的问题。我计划使用线程本地存储来管理套接字。但我不知道它是否会起作用。