pthreadsを有効にしている(またはしていない)人と、openmpをサポートしている人(またはそうでない人)が使用できるライブラリコードをいくつか記述しようとしています。私は本当にスレッドローカルストレージになりたいいくつかの変数を持っています。これを2回指定で任意の潜在的な害は冗長な__threadとompのスレッドローカル宣言
#ifdef __GNUC__
# define PREFIX __thread
#elif __STDC_VERSION__ >= 201112L
# define PREFIX _Thread_local
#elif defined(_MSC_VER)
# define PREFIX __declspec(thread)
#else
# define PREFIX
#endif
PREFIX int var = 10;
#pragma omp threadprivate(var)
は、私は、これは最近で私のシステム(Debianの上で動作します知っている
(TLSプレフィックスを把握するには、ビジネスがHow to declare a variable as thread local portably?から取られる)例えば
、そこにありますこれらのコンパイラ固有の宣言はOpenMP標準の一部ではないため、他の場所で問題が起こるかどうかを知ることは難しいです。どう
最初にC標準をチェックしてから、コンパイラの拡張機能をチェックするのはなぜですか? – Olaf
@Olaf私はそれが私がリンクしている他のSOの質問で示唆された方法とちょうど一致していました。とにかく私はここで質問している質問の目的のためには全く問題ではないと思う。 –
何が起こっているのかわからない場合は、パターンに従わないでください。標準によって機能が提供されている場合、拡張機能を使用するのは一般的には悪い設計です。常に最も一般的な方法を使用してください。 – Olaf