Amazon Best VPN GoSearch

OnWorks 网站图标

rrdthreads - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 rrdthreads

这是 rrdthreads 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


rrdthreads - 用于链接 RRD 库以在多线程程序中使用的规定

概要


在多线程程序中使用 librrd 需要一些额外的预防措施,因为 RRD
原始形式的库根本不是线程安全的。 本文档描述
在您的系统中使用多线程版本的 librrd 的过程中的要求和陷阱
自己的程序。 它还为未来的 RRD 开发提供了提示,以保持库线程 -
安全。

目前只有一些 RRD 操作以线程安全的方式实现。 他们都以
通常的 ""_r"" 后缀。

商品描述


为了在多线程程序中使用 librrd,您必须:

·链接 图书馆 而不是 图书馆 (链接时使用“-lrrd_th”)

· 使用 ""_r"" 函数代替普通的 API 函数

· 不要使用任何 at-style 时间规范。 解析这样的时间规范是
非常非线程安全。

· 切勿使用非 *"_r" 函数,除非明确记录该函数是
踩踏安全。

· 每个线程应该在第一次调用任何“librrd_th”之前调用“rrd_get_context()”
函数以设置线程特定的数据。 这不是严格要求的,但
这是测试此函数是否可以完成内存分配的唯一方法。
否则程序可能会在内存不足的情况下因 SIGSEGV 而死亡。

· 在调用库之前总是调用“rrd_error_clear()”。 否则调用
可能会由于一些较早的错误而失败。

附注 用于 减灾 贡献者
从现在开始开发 RRD 时必须遵循一些预防措施:

· 仅在库代码中使用线程安全函数。 许多经常使用的 libc 函数不是
线程安全。 在以下情况或使用以下库时要注意
职能:

· 必须避免直接调用“strerror()”:改用“rrd_strerror()”,它
提供每线程错误消息。

· “getpw*”、“getgr*”、“gethost*”函数系列(还有一些“get*”
函数)不是线程安全的:使用 *"_r" 变体

· 时间函数:“asctime”、“ctime”、“gmtime”、“localtime”:使用*“_r”变体

· "strtok": 使用 "strtok_r"

· "tmpnam": 使用 "tmpnam_r"

· 许多其他(查找文档)

· 一个名为的头文件 rrd_is_thread_safe.h 提供与 GNU 一起使用的
C 预处理器使用
“#pragma GCC 毒药”指令。 只需将此标头包含在您想要的源文件中
保持线程安全。

· 不要引入全局变量!

如果你真的,真的必须使用一个全局变量,你可以添加一个新字段到
“rrd_context”结构和修改 rrd_错误, rrd_线程安全.c
rrd_non_thread_safe.c

· 不要在 *"_r" 中使用 "getopt" 或 "getopt_long"(直接或间接)。

“getopt”使用全局变量并且在多线程应用程序中表现不佳
同时调用。 而是提供一个 *_r 函数,将所有选项作为函数
参数。 您可以为可变长度参数提供 argc 和 **argv 参数
列表。 以“rrd_update_r”为例。

· 不要使用“rrd_parsetime”函数!

它使用了很多全局变量。 您可以在非设计为的功能中使用它
线程安全的,就像在包装某些操作的“_r”版本的函数中一样(例如,
“rrd_create”,但不在“rrd_create_r”中)

目前 实施的 线 赛福 职能
目前存在“rrd_update”、“rrd_create”、“rrd_dump”的线程安全变体,
“rrd_info”、“rrd_last”和“rrd_fetch”。

使用 onworks.net 服务在线使用 rrdthreads


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad




×
广告
❤️在这里购物、预订或购买——免费,有助于保持服务免费。