shanshanpt的专栏

新博客地址: okyes.me

Linux 多线程编程( POSIX )( 四 )------>代码区 ( 互斥量实例 )
加锁与不加锁的对比:


//!>不加锁测试
//!>简单的售票小测试程序


#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <fcntl.h>

int  
      g_ticket =10;   //!> 票数目

void * entrance_1( void * arg )
{
    while(g_ticket > 0 )
    {
      printf("线程1售出票: %d \n", g_ticket);
      --g_ticket;
       sleep( 1);
    }
}

void * entrance_2( void * arg )
{
    while(g_ticket > 0 )
    {
      printf("线程2售出票: %d \n", g_ticket);
      --g_ticket;
       sleep( 1);
    }
}

int main( int argc, char ** argv )
{
   pthread_t       tid1,tid2;
   
    if(pthread_create( &tid1, NULL, entrance_1, NULL ) !=0 )
    {
      printf("创建线程1失败...\n");
       exit(EXIT_FAILURE );
    }

    if(pthread_create( &tid2, NULL, entrance_2, NULL ) !=0 )
    {
      printf("创建线程2失败...\n");
       exit(EXIT_FAILURE );
    }
   
   pthread_join( tid1, NULL);         //!> 等待...
   pthread_join( tid2, NULL);         //!> 等待...

    return0;
}

./test
结果:
    线程1售出票:10
    线程2售出票:10
    线程2售出票:8
    线程1售出票:8
    线程2售出票:6
    线程1售出票:5
    线程1售出票:4
    线程2售出票:4
    线程2售出票:2
    线程1售出票:2
   
   看看结果就知道售票是不对的!!!
   


//!>加锁测试
//!>简单的售票小测试程序


#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <fcntl.h>

int                    g_ticket =10;   //!> 票数目
pthread_mutex_t      g_mutex;

void * entrance_1( void * arg )
{
    while(g_ticket > 0 )
    {
      pthread_mutex_lock( &g_mutex);      //!> 加锁
      
      printf("线程1售出票: %d \n", g_ticket);
      --g_ticket;
     
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shanshanpt/article/details/7376312
个人分类: Linux 高级编程
想对作者说点什么? 我来说一句

Posix多线程编程学习笔记

2012年08月17日 627KB 下载

没有更多推荐了,返回首页

不良信息举报

Linux 多线程编程( POSIX )( 四 )------>代码区 ( 互斥量实例 )

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭