2016-03-01 75 views
0

我想写一个小型的C项目来了解IPC和共享内存中的一些基本机制。我想要做的是让一个进程增加一个计数器和一个或多个查看此共享变量并执行操作的进程。如果这些过程的代码存储在函数中,那将会很好。就像初学者在Linux中的IPC和/或共享内存

int counter = 0 ; 

int timer () { counter ++ } ; 

int proc1 () { /* action 1 */ } ; 

int terminator () { if (counter >= 10) /* terminate processes */} ; 

int main () { 
    counter = 0 ; 
    /* launch timer, proc1, and terminator */ 
    return 0 ; 
} 

有人可以提供一个关于如何做到这一点的例子吗?也许IPC和共享内存不是正确的技术,我是这个论点的新手。

谢谢!

回答

0

几天后,我能找到使用这种方法比IPC解决方案,但使用POSIX线程,而不是

#include <pthread.h> 

#define N 10 

int counter = 0 ; 
pthread_mutex_t counter_mutex ; 
pthread_cond_t counter_condition ; 

void * increment (void * arg) { 
    int i = 0 ; 
    sleep (1) ; 
    for (i = 0 ; i < N ; i ++) { 
     pthread_mutex_lock (& counter_mutex) ; 
     counter ++ ; 
     pthread_cond_signal (& counter_condition) ; 
     pthread_mutex_unlock (& counter_mutex) ; 
     sleep (1) ; 
    } 
    pthread_exit ((void *) 0) ; 
} ; 

void * watch (void * arg) { 
    pthread_mutex_lock (& counter_mutex) ; 
    while (counter < N) { 
     pthread_cond_wait (& counter_condition , & counter_mutex) ; 
     printf ("counter = %d\n" , counter) ; 
    } 
    pthread_mutex_unlock (& counter_mutex) ; 
    pthread_exit ((void *) 0) ; 
} ; 

int main () { 

    int i ; 
    pthread_t threads [ 2 ] ; 
    pthread_attr_t attr; 

    pthread_mutex_init (& counter_mutex , (void *) 0) ; 
    pthread_cond_init (& counter_condition , (void *) 0) ; 

    pthread_attr_init (& attr) ; 
    pthread_attr_setdetachstate (& attr , PTHREAD_CREATE_JOINABLE) ; 

    pthread_create (& threads [ 0 ] , & attr , increment , (void *) 0); 
    pthread_create (& threads [ 1 ] , & attr , watch , (void *) 0) ; 

    for (i = 0 ; i < 2 ; i ++) { 
     pthread_join (threads [ i ] , (void *) 0) ; 
    } 

    pthread_attr_destroy (& attr) ; 
    pthread_mutex_destroy (& counter_mutex) ; 
    pthread_cond_destroy (& counter_condition) ; 

    return 0 ; 
} ; 

任何DIS /优势?