RedFox20 + Oktonion + WinBuild のpthread-win32
フォークを組み合わせたもの
PThread https://github.com/WinBuilds/pthread-win32 の変更:
これは、pthreads-win32 パッケージのバージョン 2.10.0.0 のフォークです。このフォークの ABI はオリジナルとは異なります。
行われた変更:
長時間実行されるサーバーを容易にするために、 ptw32_handle_t
の再利用カウンターのタイプがint
からsize_t
に変更されました。
pthread_once_t
から未使用の要素を削除しました
このライブラリは、他の Visual Studio 2022 プロジェクトで頻繁にテストされています。
通常、私は自分の仕事に MSVC20xx プロジェクト ファイルを使用しています (そして使用してきたこともあります)。 Makefile はあまり使用されていないため、古くなっている可能性があります。
コミット メッセージ d4b0ef6b: MSVC2022/2019 プロジェクトは私の社内設定に合わせて構成されていますが、あなたの設定には合わない可能性があることに注意してください。
もちろん、いつでも設定を手動で編集できますが、多くのvcxproj
プロジェクト ファイルに対してこれを行う必要がある場合は、タスクをスクリプト化するのが良いでしょう。この種の処理を行うサンプル スクリプトについては、 update-vcxproj.js
およびpatch-vcxproj.js
を参照してください。これらを使用して、すべての C/C++ プロジェクトがまったく同じビルド設定になっていることを確認します。これにより、一部のプロジェクトがわずかに異なるデバッグ/リリース静的/DLL ランタイム ライブラリを使用してビルドすることを決定したために、実行時に厄介な驚きが起こらなくなります。 etc.etc.: 無数の方法で入手できます ?? Windows 環境のビルド システムによって異なります。楽しい! ?
(2021-12-17)
これは、ほとんどが管理上の修正を含むマイクロ リリースです。
mkdir b && cd b && cmake -G "Visual Studio 16 2019" ..
: OK を使用してスタンドアロンでテストしました。これは、いくつかの潜在的なバグが修正され、C ソースが条件付きで C++ としてコンパイルされる場合の CMake のクソ (私はまだそのツールが好きではありません) の回避策が含まれていることを意味します (pthread-EH.cpp も参照)および pthread-JMP.c: 2 つの新しいラッパー ソース ファイル)。 これは、ほとんどが管理上の修正を含むマイクロ リリースです。
MSVC および MinGW64 ビルドは、付属のテスト スイート、ストレス テスト、ベンチ テストを完了することにより、SMP アーキテクチャ (Intel x64 Hex Core) でテストされています。
必ずテスト スイートに対してビルドを実行してください。障害が発生した場合は、ツールチェーンが障害にどのように寄与しているかを検討してください。テストを成功させるために使用したツールチェーンとテスト システムの詳細については、README ファイルを参照してください。
C++ ビルドでの MinGW DWARF2 例外処理により、スレッドのキャンセルに関する問題が発生するため、64 ビットと 32 ビットの GNU CC ビルドの両方で MinGW よりも MinGW64 を推奨します。
MinGW64 には独自のネイティブ pthreads 実装も含まれており、これを使用することをお勧めします。ライブラリを構築したい場合は、インストール時に Win32 ネイティブ スレッド オプションを選択する必要があります。 MinGW64-w32 ビルドでは SJLJ 例外処理メソッドを選択することもお勧めします。 MinGW64-w64 ビルドの場合、SJLJ または SEH 例外処理メソッドが機能する必要があります。
(2018-08-08)
これは新しいメジャー リリースであることに注意してください。メジャー バージョンの増加により、ABI の 2 つの変更と他の名前の変更が導入されます。これには、リンクするアプリケーションの再コンパイルが必要になり、場合によっては設定ファイルやソース ファイル内のコンパイル時マクロ参照に対するテキストの変更が必要になります (例: PTW32_* から PTW32_ 、ptw32_から ptw32_* など)。 。
関連するすべての重要な貢献者の同意を得て、pthreads-win32 / pthreads4w バージョン 3 は、4 つのファイルを除き、Apache License v2.0 の条件に基づいてリリースされます。 APLv2 は GPLv3 および LGPLv3 ライセンスと互換性があるため、このコードは引き続き GPLv3 および LGPLv3 プロジェクト内に合法的に含まれる可能性があります。
実質的に関連する貢献者とは、今後のリリースに存在する機能を実装するオリジナルのコードを貢献した人として定義されました。これには、廃止されたコードを提供したり、バグを修正したり、美的または実用的な目的でコードを再編成したり、ビルド プロセスを改善したりするパッチを提供した数名の貢献者は含まれません。この区別は、すべての寄稿者が連絡可能であるとは限らない可能性を考慮して作業を進めるために必要でした。すべての貢献者はファイル CONTRIBUTORS にリストされます。
LGPL のままで v3 に変更される 4 つのファイルは、GNU 環境ビルドの構成に使用されるファイルです。
aclocal.m4
configure.ac
GNUmakefile.in
tests/GNUmakefile.in
この変更を要求した、または相談時に同意した寄稿者は次のとおりです。
pthreads-win32 / pthreads4w バージョン 2 リリースは LGPL のままですが、バージョン 2.11 以降はそのライセンスの v3 でリリースされるため、v2 にバックポートされた pthreads4w バージョン 3 コードへの追加によってそのコードが汚染されることはありません。
2011 年 2 月 26 日以降の一部の変更は、Windows 2000 以前のシステムと互換性がない可能性があります。
2.8.0 以降のすべてのリリースの新しいバグ修正は 1.xx シリーズには適用されていません。
MSVC、MinGW、および MinGW64 ビルドは、付属のテスト スイート、ストレス テスト、ベンチ テストを完了することにより、SMP アーキテクチャ (Intel x64 Hex Core) でテストされています。
必ずテスト スイートに対してビルドを実行してください。障害が発生した場合は、ツールチェーンが障害にどのように寄与しているかを検討してください。テストを成功させるために使用したツールチェーンとテスト システムの詳細については、README ファイルを参照してください。
C++ ビルドでの MinGW DWARF2 例外処理により、スレッドのキャンセルに関する問題が発生するため、64 ビットと 32 ビットの GNU CC ビルドの両方で MinGW よりも MinGW64 を推奨します。
MinGW64 には独自のネイティブ pthreads 実装も含まれており、これを使用することをお勧めします。ライブラリを構築したい場合は、インストール時に Win32 ネイティブ スレッド オプションを選択する必要があります。 MinGW64-w32 ビルドでは SJLJ 例外処理メソッドを選択することもお勧めします。 MinGW64-w64 ビルドの場合、SJLJ または SEH 例外処理メソッドが機能する必要があります。
以下の点を除き、このリリースは v2.11.0 と同等の機能です。
このリリースでは、ライブラリとリンクするアプリケーションに影響する pthread_t および pthread_once_t への変更が導入されています。
pthread_t: 構造体のままですが、再利用カウンタを 32 ビットから 64 ビットに拡張します。 64 ビット マシンでは、オブジェクトの全体的なサイズは増加しません。単純に 4 バイトのパディングを有効に活用して、非常に長時間実行されるアプリケーションでカウンタが小さい値から実質的にゼロにラップアラウンドするリスクを軽減します。 64 ビット再利用カウンタにより、リスクのない実行時間が数か月 (スレッドの平均寿命が 1ms と仮定) から数世紀 (スレッドの平均寿命が 1ns と仮定) に延長されます。
pthread_once_t: 長い間廃止されていた 2 つの要素を削除し、サイズを削減します。
(2018-08-08)
2.8.0 以降のすべてのリリースの新しいバグ修正は 1.xx シリーズには適用されていません。
2011 年 2 月 26 日以降の一部の変更は、Windows 2000 以前のシステムと互換性がない可能性があります。
pthreads-win32 / pthreads4w バージョン 2.11 および今後のすべての 2.x バージョンは、Lesser GNU Public License バージョン 3 (LGPLv3) に基づいてリリースされます。
このソフトウェアの次のメジャー バージョン (バージョン 3) は、Apache ライセンス バージョン 2.0 (ALv2) に基づいてリリースされます。 LGPLv3 で 2.11 をリリースすると、このソフトウェアのバージョン 3 に対する変更を今後バージョン 2 にバックポートできるようになります。さらに、現在このライブラリを使用している GPL プロジェクトは、プロジェクト内でこのコードのバージョン 2 または 3 を引き続き使用できます。
詳細については、https://www.apache.org/licenses/GPL-compatibility.html を参照してください。
この変更との一貫性を保つために、この時点からこのライブラリへの変更は、ALv2 の条件に基づいてこのソフトウェアのバージョン 3 に対してのみ受け入れられます。その後、必要に応じてバージョン 2 にバックポートされます。
バージョン 2.11 のリリースと同時にバージョン 3 もリリースしたいと考えています。
このバージョンは、付属のテスト スイート、ストレス テスト、ベンチ テストを完了することにより、SMP アーキテクチャ (Intel x64 Hex Core) でテストされています。
必ずテスト スイートに対してビルドを実行してください。障害が発生した場合は、ツールチェーンが障害にどのように寄与しているかを検討してください。テストを成功させるために使用したツールチェーンとテスト システムの詳細については、README ファイルを参照してください。 64 ビットと 32 ビットの両方の GNU CC ビルドには、MinGW32 よりも MinGW64 をお勧めします。 MinGW64 には独自の独立した pthreads 実装も含まれており、これを使用することをお勧めします。
Microsoft ツールチェーン ビルドの場合: (1) 静的リンクでは、このライブラリとリンク ライブラリまたはアプリケーションの両方が /MT で一貫してコンパイルされる必要があります。
(2) 静的ライブラリは、DLL インポート ライブラリ pthreadV*.lib と区別するために、libpthreadV*.lib に名前変更されました。
(3) 混合リンケージを使用している場合、たとえばライブラリの静的 /MT バージョンを /MD にリンクされたアプリケーションにリンクする場合、ライブラリは両方の errno を (_set_errno 経由で) 設定するため、GetLastError() を使用してエラー コードを調べることができる場合があります。 ()) と SetLastError()。
予期しない結果を引き起こす可能性があるヘッダーで PTW32_USES_SEPARATE_CRT を設定しようとする試みを削除します。特定の状況では、ユーザーは、ライブラリまたはアプリケーション、またはその両方を構築するときに、その効果を呼び出すために環境内で明示的に定義したい場合があります。 README.NONPORTABLEを参照してください。 -- ロス・ジョンソン
ライブラリは、完全に静的にリンクされたシナリオではより信頼性が高くなります。注: PIMAGE_TLS_CALLBACK コードを削除し、すべてのコンパイラ エディションでより信頼性が高いと思われる以前の方法に戻しました。
GNUmakefile に対するさまざまな修正。このファイルは削除されましたが、完全を期すために、変更はリポジトリへのコミットとして記録されています。
MinGW64-w64 は pid_t を __int64 として定義します。 sched.h にはそれが反映されるようになりました。
負荷がかかったマシンで失敗することが確認されていたいくつかのテストが修正されました。スレッドを同期するために同様の粗雑なメカニズムを使用した他のテスト (これらは単体テスト) にも同じ改善が適用されました。semaphore5.c は、sem_destroy が正当に EBUSY を返すことができることを認識します。 mutex6*.c、mutex7*.c、および mutex8*.c はすべて、単一の Sleep() をポーリング ループに置き換えました。
(2016-09-18)
2.8.0 以降のすべてのリリースの新しいバグ修正は 1.xx シリーズには適用されていません。
2011 年 2 月 26 日以降の一部の変更は、Windows 2000 以前のシステムと互換性がない可能性があります。
このバージョンは、付属のテスト スイート、ストレス テスト、ベンチ テストを完了することにより、SMP アーキテクチャ (Intel x64 Hex Core) でテストされています。
必ずテスト スイートに対してビルドを実行してください。障害が発生した場合は、ツールチェーンが障害にどのように寄与しているかを検討してください。テストを成功させるために使用したツールチェーンとテスト システムの詳細については、README ファイルを参照してください。 64 ビットと 32 ビットの両方の GNU CC ビルドには、MinGW32 よりも MinGW64 をお勧めします。 MinGW64 には独自の独立した pthreads 実装も含まれており、これを使用することをお勧めします。
新しいルーチン: pthread_timedjoin_np() pthread_tryjoin_np()
sched_getaffinity() sched_setaffinity() pthread_getaffinity_np() pthread_setaffinity_np() pthread_attr_getaffinity_np() pthread_attr_setaffinity_np()
pthread_getname_np() pthread_setname_np() pthread_attr_getname_np() pthread_attr_setname_np()
pthread_win32_getabstime_np()
GNU コンパイラ環境 (MinGW32 および MinGW64) には、autoconf を使用してビルドを自動的に構成するオプションが追加されました。
ビルド: 新しいメイクファイル ターゲットが追加され、既存のターゲットが変更または削除されました。たとえば、dll と静的ライブラリの両方の可能な構成をすべてビルドしてテストすることをターゲットとします。
GNU コンパイラ ビルドでは、ISO C および C++ 2011 標準の互換性が明示的に使用されるようになりました。 GNU コンパイラがこれをサポートしていない場合は、更新することを検討してください。 「configure」スクリプトを介して自動構成が可能になりました。スクリプトは autoconf を使用して生成する必要があります。README ファイルを参照してください。 MinGW プロジェクトの Keith Marshall に感謝します。
静的リンク: 自動静的機能は dll.c に移動され、MSVC8 以降を使用するビルドでアプリが pthread_win32_thread_detach_np() を呼び出す必要がなくなるように拡張されました。つまり、これらのビルドの静的リンクでは、DllMain のすべての機能が自動的に行われるようになりました。
一部の nmake 静的リンク ターゲットが無効になっています。TLS の動作の問題により、Makefile の V*-small-static* nmake ターゲットが無効になっています。この問題は、tests/semaphore3.c によって明らかにされます。スレッド内の pthread_self() 呼び出しが正しい POSIX スレッド ハンドルを返せず、代わりに新しい「暗黙的な」POSIX スレッド ハンドルを返すという問題です。暗黙的な pthread ハンドルにはデタッチされたスレッド ステータスがあり、これによりスレッド内の pthread_detach() 呼び出しが EINVAL を返します。 V*-static* ターゲットは影響を受けないようです。主な違いは、後者が単一のコンパイル単位から生成されることです。
小さなオブジェクト ファイルの静的リンクが機能するようになりました (MinGW)。自動静的コードは必要ですが、このコードを明示的に参照するものは何もないため、最適化されていませんでした。
sem_getvalue() は、errno を設定して -1 を返す代わりに、errno 値を返す可能性があります。
ライブラリがランタイム ライブラリに静的にリンクされている場合、つまりアプリケーションが別のランタイム インスタンスを使用している場合、Errno 値が失われていました。これは、より堅牢なエラー ステータスを組み込むことを可能にするビルド スイッチが追加されたことを除いて、依然として当てはまります。つまり、GetLastError() を介してリターン コードを取得できるようになります。
GCE (GNU C++) ビルド構成のキャンセルと pthread_exit() に関する重大なエラーの原因が Mingw32 に起因するものであることを特定しました。これが一般的なものなのか、それとも 64 ビット システムで実行される 32 ビット ライブラリやアプリを構築する場合だけなのかはわかりません。これらの障害は、64 ビット システムで実行されている Mingw64 32 ビット ビルド (マルチライブラリを有効にしてビルドされた GCC) では発生しません。
リリース 2.9.x で導入された pthread_key_delete() バグにより、テスト スイートが検出できない方法でこのルーチンが失敗しました。特にスレッドが終了する前にデストラクターを持つキーが削除された場合に、このルーチンが正しく動作することを確認するための新しいテストが追加されました。
pthread_win32_process_attach_np() は、QUSEREX.DLL の検索とロードに関する潜在的な障害とセキュリティを修正します。
_POSIX_THREAD_ATTR_STACKADDR は、pthread.h で -1 に設定されるようになりました。その結果、pthread_attr_setstackaddr() は ENOSYS を返すようになりました。以前は値が保存されており、取得することはできましたが、それ以外の場合は使用されませんでした。 pthread_attr_getstackaddr() はそれに応じて ENOSYS を返します。
pthread_mutex_init() の潜在的なメモリ リークを修正しました。リークは、ミューテックスの初期化が失敗した場合にのみ発生します (あったとしても非常にまれです)。
ライブラリがビジー待機する原因となっていたミリ秒未満のタイムアウトを修正しました。
MCS ロックでの競合状態とクラッシュを修正しました。 ptw32_mcs_lock_acquire のウェイター キュー管理コードが ptw32_mcs_lock_release のキュー管理コードと競合し、セグメンテーション フォールトを引き起こしていました。
(2012-05-27)
2.8.0 以降のこのリリースの新しいバグ修正は 1.xx シリーズには適用されていません。
このリリースは、非常に短い 2.9.0 リリースを置き換えるもので、ターゲット アーキテクチャとビルド環境を示すために DLL によりわかりやすいプロパティを埋め込むために直前に行われたコード以外の変更がいくつか追加されています。
2011 年 2 月 26 日以降の CVS の一部の変更は、Windows 2000 以前のシステムと互換性がない可能性があります。
現在、ライブラリの「C」バージョン以外の使用は推奨されていません。つまり、「C++」バージョンは一部のテストに失敗し、追加の機能は提供されません。
このバージョンは、含まれているテスト スイート、ストレス テスト、およびベンチ テストを完了することにより、SMP アーキテクチャ (Intel x64 Hex Core) でテストされています。
DLL プロパティにターゲット アーキテクチャが適切に含まれるようになりました。つまり、エクスプローラでファイル pthreadVC2.dll を右クリックし、[詳細] タブを選択すると、説明フィールドにコンパイラとアーキテクチャが表示されます (例: "MS C x64" または "MS C x86")。
Winsock ライブラリへの依存は、config.h の#define RETAIN_WSALASTERROR
によって任意にできるようになりました。 WINCE が定義されていない限り、デフォルトでは未定義です (私 (RJ) がそこに依存しているかどうかわからないため)。
(MSC および GNU ビルド) 静的にリンクされたライブラリは、プログラムの開始/終了時に自動的に初期化およびクリーンアップされるようになりました。つまり、静的にリンクされたアプリケーションは、ルーチン pthread_win32_process_attach_np() および pthread_win32_process_detach_np() を明示的に呼び出す必要がありません。私 (RJ) がプロセスを正しく理解していれば、スレッドごとのルーチン pthread_win32_thread_detach_np() もプログラムの終了時に呼び出され、プライマリ Windows ネイティブ スレッドによって取得された POSIX リソースがクリーンアップされます。 POSIX API ルーチンを呼び出す他の Windows ネイティブ スレッドは、アプリケーションが再利用された POSIX リソースまたは実行中の POSIX TSD (TLS) デストラクターに依存している場合、スレッドの終了時にスレッド分離ルーチンを呼び出す必要がある場合があります。これらのルーチンの説明については、README.NONPORTABLE を参照してください。
堅牢なミューテックスは PROCESS_PRIVATE スコープ内に実装されます。 pthread_mutex_* 関数は、堅牢なミューテックスに対して、通常の使用時とは異なるエラー コードを返す可能性があることに注意してください。たとえば、ミューテックスが堅牢な場合、すべてのミューテックス タイプの所有権をチェックするには pthread_mutex_unlock が必要ですが、これは「通常の」非ミューテックスでは発生しません。堅牢なミューテックス タイプ。
pthread_getunique_np は、他の実装とのソース レベルの互換性のために実装されています。このルーチンは、スレッドに一意に関連付けられた 64 ビットのシーケンス番号を返します。これは、アプリケーションで POSIX スレッド ハンドルを順序付けしたりハッシュしたりするために使用できます。
64 ビット システム向けにさらに多くの変更が加えられました。
WinCE のビルドとテストのためのさまざまな変更と修正。
pthread_cond_destroy() を修正 - キャンセルポイントであってはなりません。その他のビルド上の小さな問題が修正されました。
pthread_cond_destroy() から潜在的なデッドロック状態を削除します。
Win64 用にビルドおよびテストするためのさまざまな変更。
QueueUserAPCEx 非同期キャンセル ヘルパー DLL (これは別のダウンロードです) に対するさまざまな修正と pthreads コードのクリーンアップ。
潜在的な NULL ポインター参照を削除しました。
アプリケーションが pthread_barrier_wait を呼び出すスレッドの数をバリア カウントだけに制限するという要件が削除されました。また、barrier_wait と Barrier_destroy の間の競合も減少しました。この変更により、バリアの速度はわずかに低下しますが、バリアごとに消費されるセマフォの数は半分の 1 になります。
sched_[gs]etscheduler のハンドル リークを修正しました。
POSIX リエントラント関数の互換性マクロをすべて pthread.h から削除しました。単に意味的に正しくないものもありました。
スレッドは、キャッチされなかった例外をスレッド スコープ外に渡そうとしなくなりました (C++ および SEH ビルドのみ)。キャッチされなかった例外により、スレッドが戻りコード PTHREAD_CANCELED で終了するようになりました。
特に x64 向けの多くのキャスト修正、インターロック修正、x64 向けの再作業。
Winsock ライブラリへの依存は、config.h の#define RETAIN_WSALASTERROR
によって任意にできるようになりました。 WINCE が定義されていない限り、デフォルトでは未定義です (RJ にはそこへの依存関係が不明なため)。
内部管理に使用されるいくつかの静的 POSIX ミューテックスは、リソース消費、特に Win32 オブジェクトの使用を削減するために、MCS キューベースのロックに置き換えられました。
セキュリティのため、QuserEx.dll を使用する場合は、Windows システム フォルダーにインストールする必要があります。
robot[1-5].c - 堅牢なミューテックス sequence1.c - スレッドごとの一意のシーケンス番号
すべての mutex*.c テストは、必要に応じて、同じ条件下で堅牢なミューテックスもテストするように変更されています。必要に応じて、堅牢なミューテックス ベンチテストを Benchtest*.c に追加しました。
(2006-12-22)
2.7.0 以降のこのリリースの新しいバグ修正は、バージョン 1.xx シリーズには適用されていません。おそらくバージョン 1 を削除する時期が来ているでしょう。
このリリースは、SMP アーキテクチャではまだテストされていません。すべてのテストはユニプロセッサ システムで合格します。
Sem_destroy は、セマフォで待機しているスレッドがない場合でも EBUSY を返すことがありました。セマフォ構造体 (内部) の無効化に関する他の競合も同様に削除されました。
semaphore5.c - 上で参照したバグ修正をテストします。
(2005-06-04)
このリリースのすべての新機能は、pthread_once への MCS ロックの組み込みを含め、リリース 1.11.0 にバックポートされました。ただし、バージョン 1 と 2 は、パフォーマンスと機能が同一になったとしても互換性がありません。
このリリースは、ユニプロセッサ システムとマルチプロセッサ システムの両方でテストされています (テスト スイートに合格)。
Pthread_once が再実装され、優先順位の引き上げやその他の複雑さが削除され、堅牢性が向上しました。リサイクル固有ではない Win32 ハンドルのレースは削除されました。 pthread_once の一般的な形式は、以前に Alexander Terekhov によって提案されたものと同じになりましたが、「名前付きミューテックス」の代わりに、動的な自己初期化と破棄の必要なプロパティを持つキューベースのロックが実装されました。このロックも効果的です。 pthread_once_t のサイズが変更されておらず、PTHREAD_ONCE_INIT も変更されていない限り、ABI は影響を受けませんが、不透明であるはずの pthread_once_t の内部を覗くアプリケーションは壊れます。
(2005-05-19)
このリリースのすべてのバグ修正と新機能は、リリース 1.10.0 にバックポートされました。
このリリースは、ユニプロセッサ システムとマルチプロセッサ システムの両方でテストされています (テスト スイートに合格)。 MP テストを徹底的に実行し、障害が検出された場合に重要な観察とデータを提供してくれた TomTherapy の Tim Theisen に感謝します。
(2005-05-09)
このパッケージには、pthreads-win32 との一貫性を保つために編集された HTML 形式の Unix スタイルのマニュアル ページで構成されるリファレンス ドキュメント セットが含まれるようになりました。このセットは、http://sources.redhat.com/pthreads-win32/manual/index.html でオンラインで読むこともできます。
MP システム上でテスト スイートのプレリリースを実行してくれた Tim Theisen に改めて感謝します。
このリリースのすべてのバグ修正と新機能は、リリース 1.9.0 にバックポートされました。
修正された実装では、問題のある HANDLE の必要性が回避され、キーが削除されるかスレッドが終了するとすぐにメモリが再利用されます。
漏れを特定し、場所を特定してくれた Aculab の Richard Hughes に感謝します。
TSD キー デストラクターは、1 回だけではなく PTHREAD_DESTRUCTOR_ITERATIONS 回まで処理されるようになりました。 PTHREAD_DESTRUCTOR_ITERATIONS はしばらく pthread.h で定義されていましたが、使用されていませんでした。
sem_post/sem_post_multiple と sem_wait キャンセルの間のセマフォ アカウンティングの競合を修正します。これは、最後のリリースで修正された sem_timedwait の問題と同じです。
sem_init、sem_post、および sem_post_multiple は、セマフォ数が _POSIX_SEM_VALUE_MAX を超えないことをチェックするようになりました。
sigwait() は no-op にすぎませんが、標準との一貫性を保つためには、少なくともキャンセル ポイントである必要があります。
tress1.c - 条件変数とセマフォ時間待機ロジックの問題を明らかにしようとします。このテストは、前回のリリースの sem_timedwait バグを特定するために使用された Stephan Mueller のサンプル テスト コードからインスピレーションを得たものです。実行には時間がかかる可能性があるため、通常のテスト スイートには含まれていません。実行するには: nmake clean VC-stress
tsd2.c - デストラクター ルーチンの実行後に tsd キー値が NULL でない場合にキー デストラクターが再実行されるかどうかをテストします。また、 pthread_setspecific() および pthread_getspecific() がデストラクターから呼び出せるかどうかもテストします。
(2005-04-26)
現在、pthread_once() の問題を修正するバージョン 3.0.0 をリリースする予定はありません。 pthread_once のその他の可能な実装は、現在の実装の複雑さを軽減するために、将来のリリースに向けて引き続き調査されます。
このリリースのすべてのバグ修正と新機能は、リリース 1.8.0 にバックポートされています。
pthread_once レース (MP システムでの失敗) を修正しました。さまざまなコンパイラーを使用して MP システムで徹底的なリリース前テストを実行してくれた Tim Theisen に感謝します。 VC++ 6 VC++ 7.1 Intel C++ バージョン 8.0 すべてのテストに合格しました。いくつかの小さな速度改善も行われました。
pthread_mutex_timedlock() の整数オーバーラン エラーを修正しました。sem_timedwait() がリリース 2.2.0 で修正されたときに見逃されました。 NEED_SEM が定義されている場合、このルーチンは ENOTSUP を返さなくなりました。サポートされています (NEED_SEM は 3.0 より前の WinCE バージョンでのみ必要です)。
sem_timedwait() のタイムアウトのバグを修正。
NEED_SEM 条件付きインクルード コードのいくつかの問題を修正しました。 NEED_SEM に含まれるコードは、バージョン 3.0 より前の WinCE など、W32 セマフォを実装していないシステム向けに提供されています。 POSIX セマフォの代替実装は、NEED_SEM が定義されている場合、これらのシステムの W32 イベントを使用して構築されます。このリリースでは、このコードが完全に書き直され、デフォルトの POSIX セマフォ コードの大部分が再利用され、特に pthreads-win32 でサポートされるすべての sem_* ルーチンが実装されました。 Tim Theisen は、MP システム上の NEED_SEM コードに対してテスト スイートも実行しました。すべてのテストに合格しました。
ライブラリは、Borland Builder 5.5 コンパイラでエラーなしでビルドされるようになりました。
pthread_once は複雑すぎますが、テストで確認できる限り動作します。
Borland バージョンの DLL は、メモリ読み取り例外により一部のテストに失敗します。原因はまだ不明ですが、コンパイラのバグも排除されていません。
(2005-04-12)
リリース 1.7.0 は、このリリースの新しい機能とバグ修正のバックポートです。リリース 2.0.0/General の以前のメモを参照してください。
(2005-04-04)
ライブラリの静的リンク バージョンをビルドするための makefile ターゲットを追加しました。 MinGW と MSVC の両方。これは LGPL ライセンスへの変更を意味するものではなく、このライブラリに静的にリンクされているソフトウェアの配布には依然として特定の条件が課されることに注意してください。
pthread_once() には既知のバグがあります。待機中のスレッドの優先順位が開始スレッドよりも高い場合、init_routine をキャンセルすると、潜在的な飢餓 (デッドロック) の問題が露呈します。この問題は、ライブラリのバージョン 3.0.0 で修正される予定です。
sem_timedwait() の整数オーバーラン エラーを修正しました。ケビン・ルシアー
静的リンク用のプリプロセッサ ディレクティブを修正しました。ディミタール・パナヨトフ
(2005-03-16)
(2005-03-16)
このリリースでは ABI が変更され、DLL バージョンの名前が 1 から 2 に増加しました (例: pthreadVC2.dll)。
バージョン 1.4.0 では、このリリースに含まれる新機能がバックポートされます。 pthreads-win32 バージョン 1.xx でビルドされたアプリケーションへのアップデートを含むそのバージョンからビルドされた DLL を配布してください。
パッケージの名前が変更され、スナップショットの日付がバージョン番号と説明情報に置き換えられました。たとえば、このリリースは「pthreads-win32-2-0-0-release」です。
バージョン1.3.0
バージョン1.2.0
バージョン1.1.0
バージョン1.0.0
このスナップショットは、主にSnapshot-2004-11-03で導入されたCondvarバグを修正します。また、DLLバージョン化は、マイクロソフト互換DLLバージョン情報をランタイムチェックし、ABIおよびメジャー(非バックワード互換)API変更のDLLネーミングシステムを拡張できるようにするために含まれています。詳細については、readmeファイルを参照してください。
マイクロソフトスタイルのバージョンリソースが、実行時にDLLの互換性を確認したいアプリケーション用にDLLに追加されました。
PTHREADS-WIN32 DLLネーミングは、互換性のないDLLバージョンが同じファイルシステムに共存できるように拡張されました。詳細については、readmeファイルを参照してください。簡単に言えば、DLL内のバージョン情報はこれからリリースするたびに変更されますが、DLLバージョン名は新しいDLLが古いアプリケーションと逆方向に互換性がない場合にのみ変更されます。
バージョン化スキームはGNU Libtoolから借用されており、DLLネーミングスキームはCygwinからのものです。 Libtoolスタイルの番号付け規則が尊重されている場合、Cygwin DLL命名スキームは、DLLの名前の変更が最小限であり、アプリケーションが互換性のないPTHREADS-WIN32 DLLをロードしないことを自動的に保証します。
事前に構築されたDLLを使用している人は、このスナップショットにDLL/LIB名に新しい接尾辞(1)があることがわかります。例:pthreadvc1.dllなど。
特定のPOSIXマクロが変更されました。
これらの変更は、単一のUNIX仕様バージョン3に準拠することを目的としています。これは、0(ゼロ)または定義されていない場合、アプリケーションはsysconf()を使用して実行時に値を決定することを示すものです。 pthreads-win32はsysconf()を実装しません。
次のマクロは未定義ではなくなりましたが、定義され、-1(実装されていません)に設定されています。
_POSIX_THREAD_ATTR_STACKADDR
_POSIX_THREAD_PRIO_INHERIT
_POSIX_THREAD_PRIO_PROTECT
_POSIX_THREAD_PROCESS_SHARED
次のマクロが定義され、200112L(実装)に設定されています。
_POSIX_THREADS
_POSIX_THREAD_SAFE_FUNCTIONS
_POSIX_THREAD_ATTR_STACKSIZE
_POSIX_THREAD_PRIORITY_SCHEDULING
_POSIX_SEMAPHORES
_POSIX_READER_WRITER_LOCKS
_POSIX_SPIN_LOCKS
_POSIX_BARRIERS
次のマクロが定義され、適切な値に設定されています。
_POSIX_THREAD_THREADS_MAX
_POSIX_SEM_VALUE_MAX
_POSIX_SEM_NSEMS_MAX
PTHREAD_DESTRUCTOR_ITERATIONS
PTHREAD_KEYS_MAX
PTHREAD_STACK_MIN
PTHREAD_THREADS_MAX
このスナップショットから生成されたDLLは、PTHREAD_Tが変更されて一意のPOSIXスレッドIDを提供するため、アプリケーションを再コンパイルせずに古いアプリケーションで使用することはできません。
このスナップショットは拡張テストスイートに合格しますが、変更の多くはかなり大きなものであり、一部のアプリケーションは以前とは異なる動作を示す可能性があるため、注意して採用してください。うまくいけば、変化した動作は、ライブラリがその仕事で優れているためであり、悪化することではないことを願っています。
pthread_create()は、スレッド参照argとしてnullを受け入れなくなります。 SEGFAULT(メモリアクセス障害)が生じ、スレッドは作成されません。
pthread_barrier_wait()は、キャンセルポイントとして機能しなくなりました。
pthread_once()で潜在的な人種状態を修正する
互換性のために追加:pthread_recursive_mutex_initializer、pthread_errorcheck_mutex_initializer、pthread_recursive_mutex_initializer_np、pthread_errorcheck_mutex_initializer_np
デジタル火星コンパイラの最初のサポート
より高速なミューテックス。これらは、カーネルスペースチェックを減らし、タイムドロックの有効期限とロック解除の間のレースを管理するために使用されるいくつかの追加の重要なセクションを排除するアレクサンダーテレコフが提供するモデルに従って書き直されました。新しいMutexesは、Mutexesの厳格な絶対FIFOスケジューリングを強制しないことに注意してください。ただし、オーダーアウトオブオーダーロックの取得は非常にまれであるはずです。
より速いセマフォ。上記のMutexesと同様のモデルに従って、これらは再び書き直されて、予備的なユーザーのスペースチェックを使用しています。
Sem_getValue()は、ウェイターの数を返すようになりました。
PosixスレッドIDは、より強力な一意性特性を持っています。ライブラリガラントは、少なくとも2^(Wordesize)スレッドの破壊/作成サイクルで同じスレッドIDを再利用しないようにします。
Semaphore4.C:新しいsem_wait()のキャンセルをテストします。
Semaphore4t.C:同様にSem_timedwait()の場合。
RWLOCK8.C:R/Wロックの遅い実行パス、およびそれらが構築されているCVS、Mutexes、およびSemaphoresのテストと時間。
ライブラリを構築できるコンパイラのリストにWatcomを追加しようとします。これは最終的には、非読み取りを認識していないため、最終的に失敗しました。ライブラリは構築されますが、テストスイートは失敗します。詳細については、readme.watcomを参照してください。
注:アプリケーションでAsyncキャンセルを使用しない場合、またはネットワークI/Oなどのシステムリソースでブロックされているスレッドをキャンセルする必要がない場合、デフォルトの非寛容な非同期キャンセルではおそらく十分です。ただし、PTHREADS-WIN32は、実行時にこれらのコンポーネントの可用性を自動検出するため、後で気が変わった場合、ソースからライブラリを再構築する必要はありません。
書籍や他の場所で利用可能なすべてのアドバイスは、あらゆるアプリケーションで非同期キャンセルを使用することの望ましくないことに関するものですが、この機能は、POSIX標準への図書館の適合に関する歓迎すべき追加です。
スレッド優先管理のクリーンアップ。特に、スレッドの優先度の設定により、Sched_Get_Priority_Min/Max()によって返される範囲内に無効なWin32値をマッピングしようとします。 「スレッド優先度」の下でreadme.nonportableを参照してください。
PTHREAD_GETSCHEDPARAM()は、標準で要求されているように、最新のPTHREAD_SETSCHEDPARAM()またはPTHREAD_CREATE()によって確立された最新の呼び出しによって与えられた優先度を返します。以前は、PTHREAD_GETSCHEDPARAM()は、コール時に実行中のスレッドの優先度を誤って返しました。
sched_get_priority_min()およびsched_get_priority_max()は、エラーで-1を返すようになり、errnoを設定します。以前は、エラー値を直接返していませんでした。
PTHREAD_SELF()は、リサイクルする代わりにDuplicateHandleが失敗した場合、新しく作成された暗黙のPOSIXスレッドハンドルを解放します(非常にありそうもない)。
PTHREAD_EXIT()は、暗黙のPOSIXスレッドのPOSIXスレッド構造を解放したりリサイクルしたりしていませんでした。
John Bossomの当初の実装以来、ライブラリは非Posix初期化されたスレッド(Win32スレッド)がPthreads-Win32ルーチンを呼び出し、したがってPOSIXスレッドと対話することを許可しています。これは、Win32スレッドのオンザフライPOSIXスレッドIDを作成することによって行われます。これは、スレッドキャンセル(非同期または延期)に拡張されませんでした。今そうです。
前のスレッドのPOSIX PTHREAD_T値がわかっている場合、すべてのスレッドは、他のスレッド(Win32またはPOSIX)によってキャンセルできます。 PTHREAD_CANCELEDの出口コード(getExitCodethread()で取得)でスレッドが出る前に、TSDデストラクタとPOSIXクリーンアップハンドラーが実行されます。
これにより、POSIXスレッドがPTHREAD_COND_WAIT()キャンセル性とクリーンアップハンドラー(PTHREAD_COND_WAIT()がPOSIXキャンセルポイント)を使用して、POSIXスレッドと同じ方法でPOSIX CVルーチンを呼び出すWin32スレッドが可能になります。
キャンセルを追加することにより、Win32スレッドは、セマフォ、ミューテックス、条件変数、読み取り/書き込みロック、障壁、スピンロック、TSD、クリーンアッププッシュ/ポップ、キャンセル、PTHREAD_EXIT、スケジューリングなど、意味のあるすべてのPOSIXスレッドルーチンを呼び出すことができるようになりました。 。
これらのオンザフライの「暗黙的な」POSIXスレッドIDは、繰延キャンセルタイプを備えた分離(結合できない)として初期化されることに注意してください。 POSIXスレッドIDは、POSIXハンドルが必要なPOSIXルーチンによって自動的に作成されます(もちろん、ルーチンがパラメーターとしてPTHREAD_Tが必要な場合を除く)。 win32スレッドは、pthread_self()を呼び出すことにより、独自のposixスレッドIDを発見できます。これにより、必要に応じてハンドルが作成され、pthread_t値が返されます。
上記の新機能をテストします。
このスナップショットは、新しいテストケースソースに偶発的な腐敗を修正します。ライブラリソースコードに変更はありません。
ARGチェックを締め、MINGW32およびMSYSDTKの後のバージョンで作業するためのさまざまな変更。
pthread_getschedparam()など、危険なスレッドの妥当性チェックを修正しました。
sem_timedwait()は、不当なabstime値のためにタイトなチェックを使用するようになりました。
PTW32_COND_WAIT_CLEANUP()は、CV信号を不思議に消費しなくなりましたが、よりスプリアスなウェイクアップを生成する可能性があります。 SEM_TIMEDWAIT()コールは、そうすべきではないCV信号を消費していると考えられています。
暗黙のスレッドのために、PTW32_THREADDESTROY()のメモリリークを修正しました。
pthread_cond_destroy()のデッドロックの可能性を修正しました。一方のスレッドが条件変数を破壊しようとしている間に、別のスレッドが動的に初期化しようとしているときに、静的に宣言されたCVS(PTHREAD_COND_INITIALIZER)でデッドロックが発生する可能性があります。
以前は、定義されていない場合、クリーンアップスタイルはコンパイラ/言語から自動的に決定され、次のいずれかがそれに応じて定義されました。
PTW32_CLEANUP_SEH MSVC only
PTW32_CLEANUP_CXX C++, including MSVC++, GNU G++
PTW32_CLEANUP_C C, including GNU GCC, not MSVC
これらの定義は、クリーンアップのスタイル(pthread.hを参照)を決定し、最も重要なことは、キャンセルとスレッドの出口(pthread_exit経由)が実行される方法(private.cのルーチンptw32_throw()を参照)を実行します。
要するに、ライブラリの例外バージョンは、スレッドがキャンセルされるか終了するとき(pthread_exit()を介して)例外をスローします。スレッドは、PTHREAD_EXIT()を介してキャンセルまたは終了する場合です。
このおよび将来のスナップショットでは、ビルドが明示的に定義されていない限り(コンパイラオプションを介して)ptw32_cleanup_seh、ptw32_cleanup_cxx、またはptw32_cleanup_cである場合、ビルドは常にPTW32_CLEANUP_Cスタイルのクリーンアップにデフォルトです。このスタイルは、キャンセルおよびPTHREAD_EXITの実装でsetJMP/longJMPを使用するため、それを持っているアプリケーション(C ++アプリなど)にリンクしても、スタック巻き戻しは行いません。これは、現在のほとんどの商用UNIX POSIXスレッドの実装との一貫性です。 CompaqのTru64は、例外(しゃれが意図されていない)であり、将来の傾向の可能性があります。
以前には明確に文書化されていませんでしたが、PTW32_CLEANUP_*を使用してアプリケーションを構築する必要があります。これにより、リンクするライブラリのバージョンに使用されたように定義するため、PTHREAD.Hの正しい部分が含まれています。つまり、可能な定義には、次のライブラリバージョンが必要です。
PTW32_CLEANUP_SEH pthreadVSE.dll
PTW32_CLEANUP_CXX pthreadVCE.dll or pthreadGCE.dll
PTW32_CLEANUP_C pthreadVC.dll or pthreadGC.dll
たとえば、アプリがCまたはC ++であるかどうかに関係なく、PTHREADVC.LIBまたはLIBPTHREADGC.Aにリンクする場合、PTW32_CLEANUP_Cを定義する必要があります。
これのすべてのポイントは、これらのいずれかを明示的に定義していない場合、このセクションの上部で説明されているデフォルトが使用されていました。
上記で説明したように、これは変化しますが、これを明確にしようとするために、ここに例があります。
C ++例外を使用してMSVC ++ IEでアプリケーションを構築していて、PTW32_CLEANUP_*のいずれかを明示的に定義していない場合、PTW32_CLEANUP_C ++はPTHREAD.Hで自動的に定義されました。スタック巻き戻しを行うpthreadvce.dllとリンクしているはずです。
以前と同じようにアプリケーションを構築すると、pthread.hがPTW32_CLEANUP_Cをデフォルトスタイルとして自動的に設定し、PTHREADVC.DLLにリンクする必要があります。スレッドがキャンセルされたとき、またはスレッドがpthread_exit()を呼び出すとき、スタック巻き戻しは発生しません。
アプリケーションは、おそらく以前のバージョンとは異なる動作をしている可能性があります。ほとんどの場合、スレッドがキャンセルされた後、局所的にインスタンス化されたオブジェクトが破壊またはクリーンアップされない可能性があります。
以前と同じ動作が必要な場合は、コンパイラオプションを使用してPTW32_CLEANUP_C ++を明示的に定義し、以前と同じようにPTHREADVCE.DLLとリンクする必要があります。
なぜ私たちはデフォルトのスタイルを例外にやさしくないものにしているのですか?なぜなら、商用Unix Posixスレッドの実装により、スタック巻き戻しを選択できるためです。したがって、Pthread-Win32でデフォルトとして提供することは危険です。私たちはまだ選択肢を提供しますが、意識的に別の方法を選択しない限り、Pthreadsアプリケーションは、使用するスレッドプラットフォームに関係なく同様の方法で実行またはクラッシュします。または、少なくともこれは希望です。
ライブラリの例外バージョンを完全に削除してみませんか?いくつかの理由があります:
ライブラリと静的にリンクするアプリケーション用に、より小さな画像サイズを生成できるようにするために、ほとんどのルーチンは個々のソースコードファイルに分離されています。
これは、後方互換性のあるような方法で行われています。古いソースファイルは、個々のルーチンファイルを(#includesの束を介して)より大きな翻訳ユニットに集約するために再利用され、コンパイラが可能な限り最適化できるようにします。たとえば、同じ翻訳ユニット内でのみ行うことができます。
また、「pthread.c」という名前の単一のファイルをコンパイルしてライブラリ全体を構築することもできます。これは、すべての二次会衆のソースファイルを含むだけです。コンパイラは、これを使用して、ルーチンのより多くのインラインを行うことができる場合があります。
GNUコンパイラは、必要な分離(-Futction -Segmentsスイッチ)を備えたライブラリを作成することができますが、AFAIK、MSVC、およびその他のコンパイラにはこの機能がありません。
最後に、MakeFilesとCommand-line Compilationを使用しているため、この再編成がIDEプロジェクトファイルユーザーの間でどのような大混乱が発生するかわかりません。変更せずに既存のプロジェクトファイルの使用を続けることができるはずです。
pthread_num_processors_np():
プロセッサアフィニティマスクから決定されたように、プロセスが利用できるシステム内のプロセッサの数を返します。
pthread_timechange_handler_np():
オペレーターまたはタイムサービスを開始したシステムクロックの変更に対する耐性を改善するため。
このルーチンは、システムからwm_timechangeメッセージを受信したときにアプリケーションで呼び出すことができます。現在、すべての条件変数をブロードキャストしているため、待機スレッドが目覚めて条件を再評価し、必要に応じて時限待機を再開できます。
Win95が提供していないため、ライブラリには、Windowsが提供しないときはいつでも使用される独自のInterlockedCompareExchange()ルーチンが含まれています。 InterlockedCompareExchange()は、スピンロックと障壁を実装するために、またミューテックスでも使用されます。このルーチンは、i386 CPUで利用できないCMPXCHGマシン命令に依存しています。したがって、このライブラリは(Snapshot 20010712以降)I386プロセッサプラットフォームではサポートされなくなりました。
ソースコードの移植性のみの場合 - RWLockはまだ共有できません。
pthread_rwlockattr_init()
pthread_rwlockattr_destroy()
pthread_rwlockattr_setpshared()
pthread_rwlockattr_getpshared()
新しいPOSIX標準で定義されているように、およびシングルUnix Specバージョン3:
sem_timedwait()
pthread_mutex_timedlock() - Alexander Terekhov and Thomas Pfaff
pthread_rwlock_timedrdlock() - adapted from pthread_rwlock_rdlock()
pthread_rwlock_timedwrlock() - adapted from pthread_rwlock_wrlock()
[まだG ++ではない]
これは紛争を防ぐために行われました。
ハンドル、dword、およびnullは、Pthread.h内で一時的に定義されています。
pthread.defファイルの必要性を回避するだけでなく、パフォーマンスを向上させるため。どうやら、dllimportで関数を宣言すると、関数への直接の呼び出しが生成され、スタブ関数呼び出しのオーバーヘッドが回避されます。
これは、PTHREAD_CLEANUP_PUSH/POPの現在のC ++およびSEHバージョンをCバージョンで定義するマクロを置き換えることにより、アプリケーションに対して透明にすることができますが、AFAIKクリーンアップハンドラーは、例外が発生したときにデストラクタと例外クリーンアップハンドラーを使用してシーケンスで実行されません。 。
かつてスレッドで開始されたキャンセルは、不注意に二重にキャンセルすることはできません。つまり、スレッドがキャンセルの実行が開始されると、キャンセルが無効になり、その後のキャンセル要求がエラー(ESRCH)を返します。
errno:誤ったコンパイラディレクティブにより、win32 errnoの代わりにローカルバージョンのerrnoが使用されました。どちらのインスタンスもスレッドセーフですが、PTHREADS-WIN32コールが間違っている後にERRNOをチェックするアプリケーションが間違っています。これを修正することは、正しいライブラリMSVCRT.LIBにリンクするために必要なTestSuite( /MTは /MDであるはずです)の悪いコンパイラオプションを修正しました。
追加する
追加する
新しい:
Renamed DLL and LIB files:
pthreadVSE.dll (MS VC++/Structured EH)
pthreadVSE.lib
pthreadVCE.dll (MS VC++/C++ EH)
pthreadVCE.lib
pthreadGCE.dll (GNU G++/C++ EH)
libpthreadw32.a
Both your application and the pthread dll should use the
same exception handling scheme.
修正されたバグ:
MSVC++ C++ exception handling.
いくつかの新しいテストが追加されました。
新しい:
asynchronous cancellation on X86 (Jason Nye)
Makefile compatible with MS nmake to replace
buildlib.bat
GNUmakefile for Mingw32
tests/Makefile for MS nmake replaces runall.bat
tests/GNUmakefile for Mingw32
修正されたバグ:
kernel32 load/free problem
attempt to hide internel exceptions from application
exception handlers (__try/__except and try/catch blocks)
Win32 thread handle leakage bug
(David Baggett/Paul Redondo/Eyal Lebedinsky)
いくつかの新しいテストが追加されました。
修正されたバグ:
ctime_r macro had an incorrect argument (Erik Hensema),
threads were not being created
PTHREAD_CANCEL_DEFERRED. This should have
had little effect as deferred is the only
supported type. (Ross Johnson).
いくつかの互換性の改善が追加されました。
pthread_setcancelstate accepts NULL pointer
for the previous value argument. Ditto for
pthread_setcanceltype. This is compatible
with Solaris but should not affect
standard applications (Erik Hensema)
いくつかの新しいテストが追加されました。
バグ修正 - 変数を待っているスレッドのキャンセル変数が適切に機能するようになりました(Lorin HochsteinとPeter Slacik)
PTHREAD_EXIT()を呼び出す場合、固定例外スタッククリーンアップ
条件変数のバグを修正 - (Peter Slacik): - 追加の競合チェック - タイミング付きCondvar Timeoutの後、待機スレッドの数を適切に調整します。
いくつかの小さなバグが修正されています。詳細については、Changelogファイルを参照してください。
さらにいくつかのPOSIX 1B関数が含まれていますが、onyが呼び出された場合はエラー(enosys)を返します。彼らです:
sem_open
sem_close
sem_unlink
sem_getvalue
内部的にサポートされているPOSIX 1B関数は、エクスポートされた関数として利用可能になりました。
sem_init
sem_destroy
sem_wait
sem_trywait
sem_post
sched_yield
sched_get_priority_min
sched_get_priority_max
いくつかの小さなバグが修正されています。詳細については、Changelogファイルを参照してください。
初期リリース。