Linuxのマルチスレッド&スレッドの同期

1.ヘッダーファイルとコンパイルオプション

  • ヘッダファイルします。#include <pthread.hの>
  • オプションをコンパイルします。-lpthread

2.相関関数をスレッド

  1. 创建线程
    int型のpthread_create(がpthread_t * tidp制限し、CONSTのpthread_attr_t * attrのボイド制限無効start_rtn)(*)、void *型引数を制限します)。
  2. 撤退するためのイニシアチブスレッド
    のボイドpthread_exit(void *型rval_ptrを)。
  3. スレッドの終了を待ち
    ボイドpthread_joinを(がpthread_tスレッド、無効** rval_ptr)。
  4. スレッドが終了したときに別のスレッド、分離後のスレッドは、リサイクルされます、スレッドリソースを終了するためにpthread_joinをスレッドを待つことができません。
    int型pthread_detachの(がpthread_t TID)。
  5. リクエストのスレッド終了、要求だけ、スレッドが終了を待たずに
    int型のpthread_cancel(TIDがpthread_t)。
  6. スレッドIDに等しいかどうかを決定する
    INTは、pthread_equal(がpthread_t TID1、がpthread_t TID2 )。
  7. Idは独自のスレッドの取得
    がpthread_tのpthread_self(ボイド);
  8. スレッドが終了するには、あなたが登録して逆の順序で複数の実行順序を登録することができたときにスレッドのクリーンアップ関数が呼び出され
    、ボイドは、pthread_cleanup_push(無効(RTN)、ボイド( ;)、void *型のArg)
    実行INT)のボイドは、pthread_cleanup_push。

3.スレッド同期相関関数

  1. ミューテックス(mutexが)、本質的にリソースが連続アクセスされる保護するためのロックです。
  • 动态初始化ミューテックス
    のint pthread_mutex_initの(pthread_mutex_t * ATTRを制限ミューテックス、CONST pthread_mutextattr_tを制限します)。

  • 销毁ミューテックス
    int型pthread_mutex_destroyの(pthread_mutex_t *ミューテックス)。

  • ロックのインターロック量は、ロックが解除され、prhtead_mutex_trylockかかわらず、ロックが成功したかどうかの、すぐに復帰します。
    (ミューテックスpthread_mutex_t *)は、pthread_mutex_lockはint;
    int型prhtead_mutex_trylock(*ミューテックスpthread_mutex_t);
    int型pthread_mutex_unlockの(*ミューテックスpthread_mutex_t)。

  • mutexロックタイムアウトを持つ
    int型のpthread_mutex_timedlock(pthread_mutex_t *、ミューテックスを制限するのconst構造体TIMESPEC * tsptrを制限します)。

スレッドは二回mutexをロックしようとすると、彼はデッドロックに巻き込まれます。

  1. mutexロックの書き込みに関して、ロック、ライト(リーダ・ライタロック)は、シーン番号の読み込み、書き込みの数よりも非常に大きい、より多くの並列処理を可能にします。
  • ロックの初期化と破壊の書き込みを読む
    (制限は、rwlockが取得されたpthread_rwlock_t *、ATTR * constのpthread_rwlockattr_tを制限)pthread_rwlock_initのためにint型、
    int型にpthread_rwlock_destroy(pthread_rwlock_t *は、rwlockが取得されました)。

  • 加锁解锁
    のint pthread_rwlock_rdlockの(pthread_rwlock_t *は、rwlock);
    int型は、pthread_rwlock_wrlock(pthread_rwlock_tの*のは、rwlock);
    int型pthread_rwlock_unlockの(pthread_rwlock_tの*のは、rwlock);

  • 非阻塞加锁
    のint pthread_rwlock_tryrdlock(pthread_rwlock_t *は、rwlock);
    int型pthread_rwlock_trywrlockの(pthread_rwlock_tの*のは、rwlock);

  • 带有超时的读写锁
    INT pthread_rwlock_timedrdlock(pthread_rwlock_t *は、rwlock、CONST構造体TIMESPECを制限* tsptrを制限します)。
    int型pthread_rwlock_timedwrlock(pthread_rwlock_t *は、rwlock、constの構造体のタイムスペックを制限* tsptrを制限します)。

  1. 条件変数
  • 条件変数の初期化と破壊
    (制限*指揮pthread_cond_t、制限のattr pthread_condattr_tのconst *)int型てpthread_cond_init;
    int型pthread_cond_destroyは(pthread_cond_tの*指揮);

  • 等待条件变量
    int型pthread_cond_waitの(pthread_cond_t *指揮を制限し、pthread_mutex_t * mutexを制限します)。
    int型pthread_cond_timedwaitは(pthread_cond_t *指揮を制限し、pthread_mutex_t * mutexを制限し、constの構造体のtimespec * tsptrを制限します)。

  • 条件変数で待機中のスレッドウェイク
    のint pthread_cond_signalを(pthread_cond_t *指揮を); // 条件で待機している少なくとも一つのスレッドを覚ます
    のint pthread_cond_broadcastの(pthread_cond_tの*の指揮を); //は、 条件を待っているすべてのスレッドを覚まします

  1. スピンロック
  • スピンロックの初期化と破壊
    int型pthread_spin_init(pthread_spinlock_t *ロック、int型のpshared);
    int型pthread_spin_destroy(pthread_spinlock_t *ロック)。

  • 自旋锁加锁和解锁
    int型pthread_spin_lock(pthread_spinlock_t *ロック)。
    int型pthread_spin_trylock(pthread_spinlock_t *ロック)。
    int型pthread_spin_unlock(pthread_spinlock_t *ロック)。

  1. 障壁(バリア)
    障壁は、各スレッドは、すべてのスレッドがポイントに協調されるまで待機し、その時点から継続することができ、並列に動作する複数のスレッドを調整するユーザ同期機構です。障壁の一種としてpthread_joinを機能。
  • 屏障初始化和销毁
    int型pthread_barrier_init(pthread_barrier_t * ATTR、unsigned int型を(カウント)を制限*バリア、constのpthread_barrierattr_tを制限;
    int型pthread_barrier_destroy(pthread_barrier_t *バリア)。

  • 等待は
    pthread_barrier_wait(pthread_barrier_t *バリア)をint型。


参考:「UNIX高度なプログラミング環境」

ます。https://www.jianshu.com/p/1f608e1e5f7cで再現

おすすめ

転載: blog.csdn.net/weixin_34218579/article/details/91193822