それぞれのthread_inf[cnt].sem
に対して、sem_init
もしくはsem_open
をする必要があるのではないでしょうか。
sem_init
での例を書いてみました。
(GCC 4.8.3 Cygwinを使用)
lang
1#include <stdio.h>
2#include <unistd.h>
3#include <errno.h>
4#include <pthread.h>
5#include <semaphore.h>
6
7sem_t sem;
8
9void *thread_f();
10
11int main()
12{
13 pthread_t th;
14 int shared;
15 unsigned int value;
16 int r;
17
18 shared = 1;
19 value = 0;
20
21 r = sem_init(&sem, shared, value);
22 printf("r=%d, err=%s\n", r, strerror(errno));
23
24 r = sem_getvalue(&sem, &value);
25 printf("r=%d, err=%s\n", r, strerror(errno));
26
27 if (pthread_create(&th, NULL, thread_f, (void *)NULL))
28 {
29 printf("スレッドの生成に失敗\n");
30 return 1;
31 }
32
33 printf("sem_wait\n");
34 r = sem_wait(&sem);
35 printf("r=%d, err=%s\n", r, strerror(errno));
36
37 return 0;
38}
39
40void *thread_f() {
41 sleep(5);
42 printf("sem_post\n");
43 sem_post(&sem);
44 return (void *)NULL;
45}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/11/25 09:24
2014/11/25 10:24
2014/11/25 11:47
2014/11/25 12:27
2014/11/27 14:16
2014/12/07 02:09
2014/12/07 07:45