读书人

关于Linux多线程编程的有关问题

发布时间: 2012-03-11 18:15:39 作者: rapoo

关于Linux多线程编程的问题
最近在学习多线程编程,我编了下例实例,但是Printf老是打印不出来啊,这是为什么呢?

C/C++ code
#include <pthread.h>#include <sched.h>#include <stdio.h>#include <stdlib.h>#include <string.h>void reader_function( void );void writer_function( void );char buffer;int buffer_has_item = 0;pthread_mutex_t mutex;int main( void ){    pthread_t reader;    pthread_t writter;    int ret = 0;    memset(&reader, 0, sizeof(reader));    printf("main");    pthread_mutex_init(&mutex, NULL);    ret = pthread_create(&writter, NULL, (void *)writer_function, NULL);    if ( 0 != ret )    {        printf("not success");    }    ret = pthread_create(&reader, NULL, (void *)reader_function, NULL);    if( 0 != ret )    {        printf("not success");    }    pthread_join(reader, NULL);    pthread_join(writter, NULL);    return 0;}void writer_function( void ){    printf("writer_function");    while(1)    {        pthread_mutex_lock(&mutex);        if (0 == buffer_has_item)        {            buffer = 0x31;            buffer_has_item = 1;        }        sleep(1);        pthread_mutex_unlock(&mutex);    }}void reader_function( void ){    printf("reader_function");    while(1)    {        pthread_mutex_lock(&mutex);        if (1 == buffer_has_item )        {            printf("%c", buffer);            buffer_has_item = 0;        }        sleep(1);        pthread_mutex_unlock(&mutex);    }}

只要我把pthread_join(reader, NULL);
pthread_join(writter, NULL);
这2个函数去掉就可以了,但是去掉了之后main很快结束了,那2个线程也不再执行了。

[解决办法]
printf打印时候加个\n ,比如 printf("buf=%s\n",buf);

读书人网 >C++

热点推荐