⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simple_mutex.c

📁 linux下多线程程序设计,包括signals,mutex,simple_once
💻 C
字号:
/********************************************************
 * An example source module to accompany...
 *
 * "Using POSIX Threads: Programming with Pthreads"
 *     by Brad nichols, Dick Buttlar, Jackie Farrell
 *     O'Reilly & Associates, Inc.
 *
 ********************************************************
 * simple_mutex.c
 *
 * Simple multi-threaded example with a mutex lock.
 */
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <pthread.h>

void	*do_one_thing(void *);
void	*do_another_thing(void *);
void	do_wrap_up(int, int);

int r1 = 0, r2 = 0, r3 = 0;
pthread_mutex_t r3_mutex=PTHREAD_MUTEX_INITIALIZER;

extern int	main(int argc, char **argv)
{
	pthread_t       thread1, thread2;
	
	if (argc > 1) 
		r3 = atoi(argv[1]);
	
	if (pthread_create(&thread1, NULL, do_one_thing, (void *) &r1) != 0)
		perror("pthread_create"),exit(1); 
	
	if (pthread_create(&thread2, NULL, do_another_thing, (void *) &r2) != 0)
		perror("pthread_create"),exit(1); 
	
	if (pthread_join(thread1, NULL) != 0)
		perror("pthread_join"), exit(1);
	
	if (pthread_join(thread2, NULL) != 0)
		perror("pthread_join"), exit(1);
	
	do_wrap_up(r1, r2);

  return 0; 
}

void *do_one_thing(void *pnum_times)
{
	int i, j, x;
	
	pthread_mutex_lock(&r3_mutex);
	if(r3 > 0) 
	{
		x = r3;
		r3--;
	} 
	else 
	{
		x = 1;
	} 
	pthread_mutex_unlock(&r3_mutex); 
	
	for (i = 0;  i < 4; i++) 
	{
		printf("doing one thing\n"); 
		for (j = 0; j < 10000; j++) 
			x = x + i;
		(*(int *)pnum_times)++;
	}

  return(NULL);
}

void *do_another_thing(void *pnum_times)
{
	int i, j, x;
	
	pthread_mutex_lock(&r3_mutex);
	if(r3 > 0) 
	{
		x = r3;
		r3--;
	} 
	else 
	{
		x = 1;
	}
	pthread_mutex_unlock(&r3_mutex);
	
	for (i = 0;  i < 4; i++) 
	{
		printf("doing another \n"); 
		for (j = 0; j < 10000; j++) 
			x = x + i;
		(*(int *)pnum_times)++;
	}
	
	return(NULL);
}

void do_wrap_up(int one_times, int another_times)
{
	int total;
	
	total = one_times + another_times;
	printf("All done, one thing %d, another %d for a total of %d\n", one_times, another_times, total);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -