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

どせいたんさき。

ナスダヨー

sllib と pthread の簡単なテストプログラム

内容

SLLIBpthreadhello world 的なテストプログラム.おもに引数の受け渡しの練習.子スレッドたちが一斉に "Hello World!" と叫ぶようになものを作ってみる.

コード

子スレッドは 30 匹用意.スレッドは配列で定義して for ループで回している.引数に整数値を与えて,値の分だけ "Hello World" の後ろに "!" が続くようにする.最後に join で子スレッドを回収するということでよいのだろうか?

#include <sli/stdstreamio.h>
#include <pthread.h>

typedef int hello_t;

void* sayhello(void* args)
{
  int i;
  hello_t num = *(hello_t*)args;
  sli::stdstreamio sout;
  sout.printf("Hello World");
  for (i=0; i<num; i++) sout.printf("!");
  return (void*)NULL;
}

int main()
{
  sli::stdstreamio sout;
  int i;
  pthread_t hoge[30];
  for (i=0; i<30; i++)
    pthread_create(&hoge[i], NULL,&sayhello,(void*)&i); // ここで子どもたちを放流して
  for (i=0; i<30; i++)
    pthread_join(hoge[i], NULL);                        // ここで回収する
  sout.printf("\n");
  return 0;
}

実行結果

とりあえず動いた.うざい.成功しているみたい.

$ ./hello
Hello World!!Hello World!!!!!!Hello World!!Hello World!!Hello World!!!!!!Hello WorldHello World!!!!!!!!!Hello World!!!!!!!!!!Hello World!!!!!!!!!Hello World!!!!!!!!!!Hello World!!!!!!!!!!!Hello World!!!!!!!!!!!!Hello World!!!!!!!!!!!!!Hello World!!!!!!!!!!!!!!Hello World!!!!!!!!!!!!!!!Hello World!!!!!!!!!!!!!!!!Hello World!!!!!!!!!!!!!!!!!Hello World!!!!!!!!!!!!!!!!!!Hello World!!!!!!!!!!!!!!!!!!!Hello World!!!!!!!!!!!!!!!!!!!!Hello World!!!!!!!!!!!!!!!!!!!!!Hello World!!!!!!!!!!!!!!!!!!!!!!Hello World!!!!!!!!!!!!!!!!!!!!!!!Hello World!!!!!!!!!!!!!!!!!!!!!!!!Hello World!!!!!!!!!!!!!!!!!!!!!!!!!Hello World!!!!!!!!!!!!!!!!!!!!!!!!!!Hello World!!!!!!!!!!!!!!!!!!!!!!!!!!!Hello World!!!!!!!!!!!!!!!!!!!!!!!!!!!!Hello World!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Hello World