为什么没有人编写 ncurses 库的线程安全分支?

Why has no one written a threadsafe branch of the ncurses library?

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

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

编辑:我指的不是 use_screen 或 use_window 函数。这些显然要求用户更改其基于 NCurses 的代码。应该可以在 NCurses 本身内向共享资源添加互斥锁,并且所有访问函数在使用 window 执行某些操作之前获取互斥锁。 我在 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
}

那么,问题在哪里?

它已经完成(例如在 ncurses 5.7, released November 2008), but not much used. See the curs_threads 手册页中。它不是 默认 配置中的功能,因为它

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