RTOS: RTOSのためのpthread、その4

 各スレッドに、引数を渡す場合についてのテスト

ここについては、https://kaworu.jpn.org/c/pthread_%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%81%AB%E5%80%A4%E3%82%92%E6%B8%A1%E3%81%99%E6%96%B9%E6%B3%95

のソースをそのままタイプしている。

スレッド1とスレッド2に整数の数を渡し、それぞれのスレッドは2倍にする仕事をするという単純なもの。
引数は基本は1つしか渡せない。複数渡す場合は、構造体を定義しておいて、その構造体をポインタで渡してあげる。

スレッドに引数を渡す事は、RTOSを例えば想定すると、呼び出す周期なんかを引数に渡すようにしておくとかの使い使い道はたくさんあり。

あとこのソースでは、

__func__

という__func__には、現在いる関数名が文字列として格納される識別子を使っている。


/*This is a test for pthread.

 * The argument pass

 */

#include <stdio.h>

#include <stdlib.h>

#include <pthread.h>

#include <unistd.h>

#include <string.h>


void *func1(void *p);

void *func2(void *p);


int

main()

{

        pthread_t thread1, thread2;


 //       pthread_mutex_init(&mutex, NULL);


        int arg1 = 123, arg2 = 456;

        int ret1,ret2;


        ret1 = pthread_create(&thread1, NULL, (void *)func1, & arg1);

        ret2 = pthread_create(&thread2, NULL, (void *)func2, & arg2);


        printf("execute pthread_join thread1\n");

        ret1 = pthread_join(thread1,NULL);


        printf("execute pthread_join thread2\n");

        ret2 = pthread_join(thread2,NULL);


        printf("arg1 = %d\n", arg1);

        printf("arg2 = %d\n", arg2);


        printf("done\n");


  //      pthread_mutex_destroy(&mutex);


        return 0;

}


void *func1(void *p)

{

    int *ip = (int *)p;

    printf("%s: %d\n", __func__, *ip);

    *ip *=2;

    return 0;


}


void *func2(void *p)

{

    int *ip = (int *)p;

    printf("%s: %d\n", __func__, *ip);

    *ip *=2;

    return 0;

}


コメント

このブログの人気の投稿

Attiny85とAQM0802A(LCD)のI2C接続

CH9329で日本語キーボード109で正しく表示する方法