这是 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