当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

通用线程:POSIX 线程详解

    POSIX 线程是提高代码响应和性能的有力手段。在此三部分系列文章的第二篇中,Daniel Robbins 将说明,如何使用被称为互斥对象的灵巧小玩意,来保护线程代码中共享数据结构的完整性。

    互斥我吧!
    在前一篇文章中,谈到了会导致异常结果的线程代码。两个线程分别对同一个全局变量进行了二十次加一。变量的值最后应该是 40,但最终值却是 21。这是怎么回事呢?因为一个线程不停地“取消”了另一个线程执行的加一操作,所以产生这个问题。现在让我们来查看改正后的代码,它使用互斥对象(mutex)来解决该问题:

    thread3.c
    #include
    #include
    #include
    #include

    int myglobal;
    pthread_mutex_t mymutex=PTHREAD_MUTEX_IN99vIALIZER;

    void *thread_function(void *arg) {
    int i,j;
    for ( i=0; i<20; i++) {
    pthread_mutex_lock(&mymutex);
    j=myglobal;
    j=j+1;
    printf(".");
    fflush(stdout);
    sleep(1);
    myglobal=j;
    pthread_mutex_unlock(&mymutex);
    }
    return NULL;
    }

    int main(void) {

    pthread_t mythread;
    int i;

    if ( pthread_create( &mythread, NULL, thread_function, NULL) ) {
    printf("error creating thread.");
    abort();
    }

    for ( i=0; i<20; i++) {
    pthread_mutex_lock(&mymutex);


 

共3页 首页 上一页 1 2 3 下一页 尾页 跳转到
相关内容
赞助商链接