加锁与不加锁的对比://!>不加锁测试
//!>简单的售票小测试程序#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);