重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

以下のプログラムをLinuxで実行するとpthread_create関数の戻り値が『1』となり、errno変数には『4』が入ってしまいます。(どちらにも『0』が入っててほしい)
何がやりたいのかというと、子スレッドのプライオリティを優先指定にして、子スレッドが生成されることを確認したいだけなのですが。。。
(下のプログラムじゃきっと本質的には確認できたことにはならないとおもいますが。。。)
何故pthread_create関数の戻り値が『1』となり、errno変数には『4』が入ってしまうかわかる方、どなたかご教授願えませんでしょうか?
-------------------------------ここから-------------------------------
#include <pthread.h>
#include <errno.h>

void *test2( void * );


int main ( int argc, char **argv )
{
int iThCreateRes=0;
pthread_attr_t t_attr;
int bRet=0;
pthread_t szThreadHandle;

errno = 0;

pthread_attr_init( &t_attr );

pthread_attr_setdetachstate( &t_attr, PTHREAD_CREATE_JOINABLE );

pthread_attr_setschedpolicy( &t_attr,SCHED_RR );

pthread_attr_setinheritsched( &t_attr, PTHREAD_EXPLICIT_SCHED );

pthread_attr_setscope( &t_attr, PTHREAD_SCOPE_PROCESS );

iThCreateRes = pthread_create( &szThreadHandle, &t_attr, test2, (void *)777 );

if( iThCreateRes == 0 )
{
}

return ( bRet );
}
void *test2( void *iParam )
{
return (void*)0;
}
-------------------------------ここまで-------------------------------

A 回答 (2件)

asm/errno.hをみれば分かると思いますが、EINTRというエラーが発生しています。


通常、pthread_create()のエラーとしてはEINVALか、EAGAINがあります。
ざっくり、ソースを見たところ、pthread_create()の呼び出しで、引数に(void *)777と指定していますが、これが間違っているのでは?

int arg = 777;

iThCreateRes = pthread_create(&szThreadHandle, &t_attr, test2, (void *)&arg);

とやってみてください。
    • good
    • 0

errno = 4 が何を意味しているのか、調べましたか?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!