ページ 11

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

Posted: 2016年3月19日(土) 09:39
by Veint_Fz
はじめて質問させていただきます。
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を使用しています。

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

Posted: 2016年3月19日(土) 10:12
by みけCAT
long long int grg;の前にvolatileをつけてもうまくいかないですか?

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

Posted: 2016年3月19日(土) 11:01
by Veint_Fz
みけCAT様、回答ありがとうございます。

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

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