さまざまなスレッド同期メカニズムを使用する割り当てに取り組んでいますが、頭痛の種は pthread_barrier_t だけです。
アイデアは、いくつかのスレッドのチェックポイントとしてバリアを実装することですが、それらは永続的にブロックされています。
ここでいくつかの回答を確認しましたが、実装は正しいようで、この単純なものを問題なくコンパイルして実行しました。
cpu.c (メインスレッドを含む):
#include <pthread.h>
#include "../include/cpu.h"
#include "../include/units.h"
pthread_barrier_t barrier;
void cpu_boot() {
pthread_barrier_init(&barrier, NULL, 2));
}
void *cpu_thread() {
pthread_t unit1_thread;
pthread_t unit2_thread;
pthread_create(&unit1_thread, NULL, &unit1_func, NULL);
pthread_create(&unit2_thread, NULL, &unit2_func, NULL);
(...)
pthread_join(unit1_thread, NULL);
pthread_join(unit2_thread, NULL);
pthread_exit(0);
}
units.c (他のスレッドの関数を含む):
#include <pthread.h>
#include "../include/units.h"
#include "../include/cpu.h"
void *unitN_func() {
(...)
pthread_barrier_wait(&barrier);
pthread_exit(0);
}
いくつかのメモ:
- 私が参照している両方のファイルには、独自のヘッダーファイルがあります
- コードを短くするために、コードの一部を慎重に削除しました
- とにかく、関数本体はほとんど空です。バリアが機能するのを待っています
- コードを短く保つために、エラー チェックも削除されました (実行時にエラーは発生しません)。
- バリアカウントは、いくつかのスレッドの削除を反映しています
- バリアは cpu.h で拡張されます
ありがとう!