clang コンパイラの -pthread と 最適化オプションについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Veint_Fz

clang コンパイラの -pthread と 最適化オプションについて

#1

投稿記事 by Veint_Fz » 9年前

はじめて質問させていただきます。
pthreadsを使用して数字をひたすらカウントする単純なものなのですが
コンパイル時に clang -pthread -o ***** *****.c とすると期待
どおりに動作するのですが、clang -pthread -O3 -o ***** *****.c
のように -O 〜 -O4 などの最適化オプションをつけるとひたすら "0" が
表示されます。最適化オプションをつけても正常に動作するようにしたい
のですがうまくいきません。いろいろ調べてみたのですが解決できません。
よろしくお願いします。

コードは以下のとおりです。

コード:

#include <stdio.h>
#include <pthread.h>

void th_a(void);
void th_b(void);

long long int grg;

int main(void)
{
	pthread_t th_la, th_lb;

	pthread_create(&th_la, NULL, (void *)th_a, (void *)NULL);
	pthread_create(&th_lb, NULL, (void *)th_b, (void *)NULL);

	pthread_join(th_la, NULL);

	return 0;
}

void th_a(void)
{
	for(grg = 0; ; grg++);
}

void th_b(void)
{
	while(1)
	{
		printf("%lld\n", grg);
	}
}
OSはLinux Mintを使用しています。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: clang コンパイラの -pthread と 最適化オプションについて

#2

投稿記事 by みけCAT » 9年前

long long int grg;の前にvolatileをつけてもうまくいかないですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Veint_Fz

Re: clang コンパイラの -pthread と 最適化オプションについて

#3

投稿記事 by Veint_Fz » 9年前

みけCAT様、回答ありがとうございます。

"volatile"つけるとうまくいきました。すみません私の勉強不足でした。
最適化を抑止するという意味なんですね。勉強になりました。

お手数をお掛けしました。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る