Skip to content

日本語マニュアル

Shuta Kimura edited this page Aug 20, 2019 · 14 revisions

TinyThreads Wiki (日本語)

TinyThreadsは32-bitアーキテクチャの組み込みマイコン向けに作られた、POSIXスレッド準拠APIを持つマルチスレッド環境構築ライブラリです。 ROM/RAMともに限られた条件下でも簡単にマルチスレッド環境を構築できます。

  • メリット
    • POSIXスレッドAPI準拠のため、新たにAPIを学習する必要がない。
    • 各CPUの開発環境に統合して扱えるように作られているので、プロジェクトへの適用が容易。
  • デメリット
    • 他の組み込み向けRTOSに比べて同期オブジェクトの種類や機能が少ない。(APIをPOSIX準拠にしたことによる制約です)
      • 例えば、割り込みハンドラ内でも扱える「イベントフラグ」に相当するものは存在しない。

ライセンス

MIT Licenseを適用します。

対応CPU

現在、以下のCPUに対応しています。それぞれのリンクは使い方にジャンプします。

対応している機能

以下の機能に対応しています。なお、一部の機能はコード量削減のためコンパイル対象から外すことが可能です。

  • シングルCPU上での時分割方式によるマルチスレッド制御
  • スレッドの優先度・ラウンドロビン/FIFO方式に基づいたスケジューリング
  • プリエンプションによるスレッドの切り替え
  • 動的なスレッドの生成と終了 (pthread_create / pthread_exit)
  • スレッドの待機 (pthread_join)
  • ミューテックス機能 (pthread_mutex_*)
  • 状態変数機能 (pthread_cond_*)
  • Once機能 (pthread_once_*)
  • セマフォ機能 (sem_*)
    • sem_postがTinyThreads内で唯一の「割り込みハンドラ内で安全に使えるAPI」です。
  • スリープ機能 (sleep, usleep)
    • POSIXスレッドのAPIではありませんが、スケジューリングとの関連が深いためTinyThreadsで提供しています。
  • スレッド名設定機能 (pthread_getname_np / pthread_setname_np)
    • POSIX標準ではなくGNU拡張に基づくAPIですが、デバッグ中のスレッド区別を容易にするため実装されています。

詳しくはAPI一覧を参照ください。

未対応の機能

以下の機能は現時点で対応していません。

  • バリア (pthread_barrier_*)
  • スピンロック (pthread_spin_*)
  • reader-writerロック (pthread_rwlock_*)
  • TLS(Thread Local Storage)に関する機能 (pthread_key_* 等)

対応しない機能

以下の機能は対応していません。原則として組み込み環境下には不要と判断された機能であり、今後の対応予定もありません。

  • キャンセル機能 (pthread_cancel)
  • シグナル関連機能 (pthread_sig*, pthread_kill)