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

📄 testlock.c

📁 网络MPEG4IP流媒体开发源代码
💻 C
字号:
/* Test the thread and mutex locking functions    Also exercises the system's signal/thread interaction*/#include <signal.h>#include <stdio.h>#include <stdlib.h>#include "SDL.h"#include "SDL_mutex.h"#include "SDL_thread.h"static SDL_mutex *mutex = NULL;static Uint32 mainthread;static SDL_Thread *threads[6];void printid(void){	printf("Process %u:  exiting\n", SDL_ThreadID());}	void terminate(int sig){	printf("Process %u:  raising SIGTERM\n", SDL_ThreadID());	raise(SIGTERM);}void closemutex(int sig){	Uint32 id = SDL_ThreadID();	int i;	printf("Process %u:  Cleaning up...\n", id == mainthread ? 0 : id);	for ( i=0; i<6; ++i )		SDL_KillThread(threads[i]);	SDL_DestroyMutex(mutex);	exit(sig);}int Run(void *data){	if ( SDL_ThreadID() == mainthread )		signal(SIGTERM, closemutex);	while ( 1 ) {		printf("Process %u ready to work\n", SDL_ThreadID());		if ( SDL_mutexP(mutex) < 0 ) {			fprintf(stderr, "Couldn't lock mutex: %s", SDL_GetError());			exit(1);		}		printf("Process %u, working!\n", SDL_ThreadID());		SDL_Delay(1*1000);		printf("Process %u, done!\n", SDL_ThreadID());		if ( SDL_mutexV(mutex) < 0 ) {			fprintf(stderr, "Couldn't unlock mutex: %s", SDL_GetError());			exit(1);		}		/* If this sleep isn't done, then threads may starve */		SDL_Delay(10);	}	return(0);}int main(int argc, char *argv[]){	int i;	int maxproc = 6;	/* Load the SDL library */	if ( SDL_Init(0) < 0 ) {		fprintf(stderr, "%s\n", SDL_GetError());		exit(1);	}	atexit(SDL_Quit);	if ( (mutex=SDL_CreateMutex()) == NULL ) {		fprintf(stderr, "Couldn't create mutex: %s\n", SDL_GetError());		exit(1);	}	mainthread = SDL_ThreadID();	printf("Main thread: %u\n", mainthread);	atexit(printid);	for ( i=0; i<maxproc; ++i ) {		if ( (threads[i]=SDL_CreateThread(Run, NULL)) == NULL )			fprintf(stderr, "Couldn't create thread!\n");	}	signal(SIGINT, terminate);	Run(NULL);	return(0);	/* Never reached */}

⌨️ 快捷键说明

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