【问题标题】:Why has no one written a threadsafe branch of the ncurses library?为什么没有人编写 ncurses 库的线程安全分支?
【发布时间】:2015-04-28 04:50:03
【问题描述】:

NCurses 似乎是一个流行的库。 它的弱点之一是它不是线程安全的。将共享资源包装在互斥锁中应该不难。

是否有特定原因,为什么没有人启动线程安全分支? (法律问题,引入平台依赖,...)

编辑:我不是指 use_screen 或 use_window 函数。这些显然需要用户更改基于 NCurses 的代码。应该可以将互斥锁添加到 NCurses 本身内的共享资源中,并且所有访问函数在对窗口执行某些操作之前都会获取互斥锁。 我在 NCurses 中想象这样的事情:

#if __cplusplus >= 201103L
#include <mutex>
#define THREADSAFE
#endif
...
#ifdef THREADSAFE
std::recursive_mutex  mxCurscr;
#endif
...
int doupdate(void)
{
#ifdef THREADSAFE
mxCurscr.lock();
#endif
... // <-- Access the screen here.
#ifdef THREADSAFE
mxCurscr.unlock()
#endif
}
  • 这不依赖于 C++11 标准以外的任何东西。
  • 这与旧的编译器兼容。 (但那时没有线程安全。)
  • 修改时间不会超过一两天。
  • 这满足了对线程安全 NCurses 的需求。
  • NCurses 库的用户不必费心。
  • 这项工作为所有用户一次性完成,而不是让每个用户实现自己的线程安全。

那么,问题在哪里?

【问题讨论】:

    标签: thread-safety ncurses


    【解决方案1】:

    已经完成了(在ncurses 5.7,发布November 2008),但用的不多。例如,参见curs_threads 手册页。它不是 default 配置中的功能,因为它

    • 更改 ABI(应用程序二进制接口),并
    • 对如何使用标准变量添加了一些限制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-12
      • 2011-04-28
      • 2023-03-30
      • 1970-01-01
      • 2012-11-20
      • 2013-10-11
      • 2020-10-10
      相关资源
      最近更新 更多