DUPLOCALE(3) |
FreeBSD Library Functions Manual |
DUPLOCALE(3) |
名称
duplocale —
ロケールを複製する
ライブラリ
Standard C Library (libc, -lc)
書式
#include < xlocale.h>
locale_t
duplocale( locale_t locale);
解説
同じロケール値を参照するけれども独立した内部状態がある、新しい
locale_t を返す既存の
locale_t を複製します。
mblen(3) のような様々な関数は、永続的な状態を要求します。これらの関数は、以前は、静的変数を使用し、複数のスレッドからそれらへの呼び出しは、未定義の振る舞いとなります。それらは、現在、
uselocale(3) によって現在のスレッドに関連した
locale_t のフィールドを使用します。したがって、これらの呼び出しは、ユニークなスレッドごとのロケールがあるスレッドでのみスレッドセーフです。
この呼び出しによって返されるロケールは、 freelocale(3) で解放されなければなりません。
規格
この関数は、 IEEE Std 1003.1-2008 (“POSIX.1”) に適合しています。
バグ
理想としては、
uselocale(3) は、スレッドセーフを保証するために暗黙のうちに
locale_t のコピーを行うべきで、各スレッドでグローバルなロケールのコピーは、ゆっくりインストールされるべきです。 FreeBSD の実装は、Darwin との互換性のために、これを行いません。