- 论坛徽章:
- 0
|
- #include <pthread.h>
- #include <stdlib.h>
- #include <stdio.h>
- int send_tag = 0;
- int recv_tag = 0;
- pthread_mutex_t ping_lock;
- pthread_cond_t send_cond;
- pthread_cond_t recv_cond;
- void* th1(void *arg)
- {
- while (1)
- {
- pthread_mutex_lock(&ping_lock);
- recv_tag = 0;
- sleep(1);
- printf("th1\n");
- recv_tag = 1;
- pthread_cond_signal(&recv_cond);
- while(send_tag == 0){
- pthread_cond_wait(&send_cond, &ping_lock);
- }
- send_tag = 0;
- pthread_mutex_unlock(&ping_lock);
- }
- return NULL;
- }
- void* th2(void *arg)
- {
- pthread_t pid = pthread_self();
- while(1)
- {
- pthread_mutex_lock(&ping_lock);
- while(recv_tag == 0){
- pthread_cond_wait(&recv_cond, &ping_lock);
- }
- recv_tag = 0;
- printf("th %ld\n", pid);
- sleep(1);
- send_tag = 1;
- pthread_cond_signal(&send_cond);
- pthread_mutex_unlock(&ping_lock);
- }
- return NULL;
- }
- int main()
- {
- int i = 0;
- pthread_t pid;
- pthread_attr_t attr;
- (void) pthread_attr_init(&attr);
- (void) pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
- (void)pthread_mutex_init(&ping_lock, NULL);
- (void)pthread_cond_init(&send_cond, NULL);
- (void)pthread_cond_init(&recv_cond, NULL);
- pthread_create(&pid, &attr, th1, NULL);
- for(i = 0; i< 100000; i++){
- pthread_create(&pid, &attr, th2, NULL);
- }
- while(1);
- sleep(1);
- return 0;
- }
复制代码 |
|