zoukankan      html  css  js  c++  java
  • 多线程编程,线程同步,线程互斥示例

    #include <stdio.h>
    #include <stdlib.h>
    #include <pthread.h>
    #include <semaphore.h>
    int count,v1,v2;
    int flags = 1;
    sem_t sem;
    pthread_mutex_t mt;
    void *fun(void *arg)
    {
        int ret = -1;
        while(1)
        {
    #if 0
            ret = sem_wait(&sem);
            if ( -1 == ret )
            {
                perror("sem_init");
                return ;
            }
    #else
            ret = pthread_mutex_lock(&mt);
            if (0 != ret)
            {
                perror("pthread_mutex_lock");
                return -1;
            }
    
    #endif
            if ( v1 != v2 )
                printf("******* %d,%d
    ",v1,v2);
    #if 0
            ret = sem_post(&sem);
            if ( -1 == ret )
            {
                perror("sem_init");
                return ;
            }
    #else
            ret = pthread_mutex_unlock(&mt);
            if (0 != ret)
            {
                perror("pthread_mutex_lock");
                return -1;
            }
    #endif
        }
        *((int *)arg) = 3;
        pthread_exit("fun");//exit
    }
    int main(int argc,char **argv)
    {
        int a = 0;
        pthread_t id;
        int ret = -1;
        void * val = NULL;
    #if 0
        ret = sem_init(&sem,0,1);
        if ( -1 == ret )
        {
            perror("sem_init");
            return -1;
        }
    #else  
        ret = pthread_mutex_init(&mt,NULL);
        if( 0 != ret)
        {
            perror("pthread_mutex_init");
            return -1;
        }
    #endif
        ret = pthread_create(&id,NULL,fun,(void*)&a);//fork
        if ( 0 != ret )
        {
            perror("pthread_creat");
            return -1;
        }
    
        while(1)
        {
    #if 0
            ret = sem_wait(&sem);
            if ( -1 == ret )
            {
                perror("sem_init");
                return -1;
            }
    #else 
            ret = pthread_mutex_lock(&mt);
            if (0 != ret)
            {
                perror("pthread_mutex_lock");
                return -1;
            }
    #endif
            count++;
            v1=count;
            v2=count;
    #if 0
            ret = sem_post(&sem);
            if ( -1 == ret )
            {
                perror("sem_init");
                return -1;
            }
    #else 
            ret = pthread_mutex_unlock(&mt);
            if (0 != ret)
            {
                perror("pthread_mutex_lock");
                return -1;
            }
    #endif
        }
        ret = pthread_join(id,&val);//wait
        if ( 0 != ret )
        {
            perror("pthread_join");
            return -1;
        }
        printf("return val is %s
    ",val);
        printf("%d**
    ",a);
        return 0;
    }
  • 相关阅读:
    C# BackGroundWorker控件演示代码
    C#多线程池演示例程下载图片
    反流技术之IE插件技术研究第二部分
    C# 从剪贴板中读取HTML中的中文字符出现乱码问题的解决方案
    C#单线程演示程序带参数
    C# 中as和is的用法总结
    Delphi关于记录文件的操作
    用PowerDesigner创建Access数据库
    常用Delphi开发资料网址
    等待外部应用程序的执行结果
  • 原文地址:https://www.cnblogs.com/smile-at-you/p/3363788.html
Copyright © 2011-2022 走看看