- 论坛徽章:
- 36
|
以A1 A2为例- #include <pthread.h>
- #include <semaphore.h>
- #include <sys/types.h>
- #include <stdio.h>
- #include <unistd.h>
- #define BUF_LEN_A 5
- sem_t sem_id_A1;
- sem_t sem_id_A2;
- int buf_len_A = 0;
- char buf_A[BUF_LEN_A] = {0};
- void* thread_A1(void *arg)
- {
- while(1)
- {
- //example
- printf("\n");
- for(int i=0; i < BUF_LEN_A; i++)
- {
- sleep(1);
- buf_A[buf_len_A] = 'A';
- printf("thread_A1 set %d: %c\n", i, buf_A[i]);
- buf_len_A++;
- }
-
- if(BUF_LEN_A == buf_len_A)
- {
- buf_len_A--;
- sem_post(&sem_id_A2);
- sem_wait(&sem_id_A1);
- }
- }
- }
- void* thread_A2(void *arg)
- {
- while(1)
- {
- sem_wait(&sem_id_A2);
- //example
- printf("\n");
- for(int i=buf_len_A; i >= 0; i--)
- {
- printf("thread_A2 get %d: %c\n", i, buf_A[i]);
- buf_len_A--;
- sleep(1);
- }
- if(buf_len_A < 0)
- {
- buf_len_A++;
- sem_post(&sem_id_A1);
- }
- }
- }
- int main(int argc, char *argv[])
- {
- pthread_t tid_A1, tid_A2;
- sem_init(&sem_id_A1, 0, 0);
- sem_init(&sem_id_A2, 0, 0);
- pthread_create(&tid_A1,NULL,thread_A1, NULL);
- pthread_create(&tid_A2,NULL,thread_A2, NULL);
- getchar();
- return 0;
- }
复制代码 |
|