Random Tech Thoughts

The title above is not random

Glibc Stdio Functions Are Thread-safe

根据 man flockfile,stdio 的函数是线程安全的。FILE 里其实包含有 lock,stdio 函数会执行加锁操作。

需要的时候用户可以使用不加锁的 stdio 函数(例如 fwrite_unlocked,参考 man unlocked_stdio),自己调用 flockfile 等函数来执行加锁解锁操作。

以前我还自己写测试来判断 glibc 的 stdio 函数是否线程安全,今天才看到 man page 里的说明。

PS: 今天还碰到个 uint16_t 和 int 做比较出错的 bug。。。我用宏定义了一个常数 -1,C 可以通过 -1UL 来指定 unsigned long int 1,但是没有办法指定为 uint16_t,最后只好换成用 const uint16_t 定义常量就搞定了。

const 的限制在于不能用它定义的其他常数的算数运算来定义其他的 const,这点限制不太方便。

Comments