freebsdでマルチスレッドなテストコードを書いてみた。

freebsdでマルチスレッドなテストコードを書いてみた。

よいサンプルコードがあったので拝借。ありがとうございます。

コンピューター:C言語講座:マ ルチスレッドについて

このサンプルコードは、スレッドを二本作成、それぞれで適当な計算をsleepかましながらさせる、終了って流れ。

これを複数のスレッドを張りながらメモリの使用量をみてみる。

#include        <stdio.h>
#include        <sys/types.h>
#include        <pthread.h>
#define THREADS_NUM 1500

void *counter(void *arg)
{
int     i;
pid_t    pid;
pthread_t thread_id;

pid=getpid();
thread_id=pthread_self();

for(i=0;i<10;i++){
usleep(100000);
printf(“[%d][%d]%d\n”,pid,thread_id,i);
}

return(arg);
}

void main()
{
pid_t   p_pid;
pthread_t thread_id[THREADS_NUM];
int status, i;
void *result;

p_pid=getpid();

printf(“[%d]start\n”,p_pid);

for(i=0; i<THREADS_NUM; i++){
status=pthread_create(&thread_id[i],NULL,counter,(void *)NULL);
if(status!=0){
fprintf(stderr,”pthread_create : %s”,strerror(status));
}
else{
printf(“[%d]thread_id=%d\n”,p_pid,thread_id[i]);
}
}
for(i=0; i<THREADS_NUM; i++){
pthread_join(thread_id[i],&result);
printf(“[%d]thread_id%d = %d end\n”,p_pid, i, thread_id[i]);
}
printf(“[%d]end\n”,p_pid);
}

なんかインデントが消えてしまうので見にくい。

これを実行してみる。

PID USERNAME   THR PRI NICE   SIZE    RES STATE    TIME   WCPU COMMAND

29648 yousan       1   8    0  5720K  1060K nanslp 0   0:00  0.00% mt   (何もしてないとき)

29648 yousan    1500   8    0   193M   111M STOP   1   0:00  1.27% mt (一瞬で制限の1500本到達)

すれっどが1500本で188MBのメモリを仮想メモリとして割り当てようとしたらしい。一本あたり125KBの仮想メモリが必要っぽい。先述の問題ほどメモリいらないぽ。残念。

コメントを残す