読者です 読者をやめる 読者になる 読者になる

EnsekiTT Blog

EnsekiTTが書くブログです。

排他printf

課題ラッシュだと思ってたら実は自分で定めたハードルが高すぎただけだった…

こんなに頑張らなくてもいいのにって課題にいらん機能を大量に詰め込んで自己満足してしまう。

POSIX Threadを使ってバッファ構造を扱うプログラムを書いてたら、

各スレッドでデバッグ用出力(printf)をしたら・・・
他のスレッドのprintfと干渉してバグってしまった。

そのために stdarg.hをインクルードした上で、

//排他制御を行ったprint
void print_thread(const char *format, ...){
    va_list ap;
    pthread_mutex_lock(&print_m);

    va_start(ap,format);
    printf(format,va_arg(ap, int));
    va_end(ap);
    pthread_mutex_unlock(&print_m);
}

と、エラー処理?なにそれ美味しいの?な関数を作って対処してみました。

排他制御は以下の関数で行っています。
pthread_mutex_t print_m;
で宣言する。
pthread_mutex_lock(&print_m);

pthread_mutex_unlock(&print_m);
で囲まれた中の処理を排他的に行う。

ちょっと自分のメモっぽくなったけど、もうちょっと巧いことまとめて今後スレッド使うときに使っていきたいな~

にほんブログ村 大学生日記ブログ 理系大学生へ
にほんブログ村