Linux操作系统,C语言实现多线程
Windows操作系统,C语言实现多线程
Windows下的多线程(不带停止)
Linux操作系统,C语言实现多线程: #include <stdio.h>#include <stdlib.h>
#include <pthread.h>
void * ThreadOne ( void * threadArg )
{
printf ( "线程开始啦,参数是:%s\n" , (char *)threadArg )
return NULL
}
int main ( void )
{
pthread_t ThreadID /* 记录线程标识符 */
void * waitingResult /* 等待线程退出的等待结果 */
int errorCode /* 记录线程的错误代码 */
char * aMessage = "这是线程的参数"
/* 创建并启动线程ThreadOne。若返回值非零,则线程创建失败 */
errorCode = pthread_create( &ThreadID, NULL, ThreadOne, aMessage )
if ( errorCode != 0 )
{
printf ("线程ThreadOne创建失败。错误代码:%d\n", errorCode )
return EXIT_FAILURE
}
/* 等待线程标识符为的ThreadID的线程结束 */
errorCode = pthread_join( ThreadID, &waitingResult )
if ( errorCode != 0 )
{
printf ( "等待线程退出等待失败。错误代码:%d\n" , errorCode )
return EXIT_FAILURE
}
printf( "线程的返回值是%p\n", waitingResult )
return EXIT_SUCCESS
} Windows操作系统,C语言实现多线程: #include <stdio.h>
#include <windows.h>
DWORD APIENTRY ThreadOne ( LPVOID threadArg )
{
printf ( "线程开始啦,参数是:%s\n" , (char *)threadArg )
return 0
}
int main ( void )
{
HANDLE hThread /* 记录线程句柄 */
DWORD ThreadID /* 记录线程ID号 */
DWORD waitingResult /* 等待线程退出的等待结果 */
DWORD threadExitCode /* 记录线程的返回值 */
char * aMessage = "这是线程的参数"
/* 创建并启动线程ThreadOne,返回值为线程句柄,赋值给hThread */
hThread = CreateThread ( NULL, 0L, ThreadOne, (LPVOID)aMessage, 0L, &ThreadID )
if ( hThread == NULL )
{
printf ("线程ThreadOne创建失败。错误代码:%lu\n", GetLastError() )
return EXIT_FAILURE
}
/* 等待线程句柄为的hThread线程结束 */
waitingResult = WaitForSingleObject ( hThread, INFINITE )
if ( waitingResult == WAIT_FAILED )
{
printf ( "等待线程退出等待失败。错误代码:%lu\n" , GetLastError() )
return EXIT_FAILURE
}
if ( GetExitCodeThread ( hThread , &threadExitCode ) )
printf ( "线程的返回值是%lu\n", threadExitCode )
else
printf ( "获取线程的返回值获取失败。错误代码:%lu\n" , GetLastError() )
return EXIT_SUCCESS
} Windows下的多线程:(不带停止) #include <stdio.h>
#include <windows.h>
DWORD WINAPI duoxianchen(LPVOID lpParam)
int main(int argc, char *argv[])
{
int num=0
CreateThread(NULL,NULL,duoxianchen,&num,NULL, NULL)
while(1)
{
num++
printf("主线程! %05d\n",nu***eep(40)
}
return 0
}
DWORD WINAPI duoxianchen(LPVOID lpParam)
{
int* a=lpParam
while(1)
{
++*a
printf("副线程! %05d 0x%p\n",*a,a)
Sleep(80)
}
return 0
}
线程创建
函数原型:intpthread_create(pthread_t*restrict tidp,const pthread_attr_t *restrict attr,void *(*start_rtn)(void),void *restrict arg)
返回值:若是成功建立线程返回0,否则返回错误的编号。
形式参数:pthread_t*restrict tidp要创建的线程的线程id指针;const pthread_attr_t *restrict attr创建线程时的线程属性;void *(start_rtn)(void)返回值是void类型的指针函数;void *restrict arg start_rtn的形参。
线程挂起:该函数的作用使得当前线程挂起,等待另一个线程返回才继续执行。也就是说当程序运行到这个地方时,程序会先停止,然后等线程id为thread的这个线程返回,然后程序才会断续执行。
函数原型:intpthread_join(pthread_tthread, void **value_ptr)
参数说明如下:thread等待退出线程的线程号;value_ptr退出线程的返回值。
返回值:若成功,则返回0;若失败,则返回错误号。
线程退出
函数原型:voidpthread_exit(void *rval_ptr)
获取当前线程id
函数原型:pthread_tpthread_self(void)
互斥锁
创建pthread_mutex_init;销毁pthread_mutex_destroy;加锁pthread_mutex_lock;解锁pthread_mutex_unlock。
条件锁
创建pthread_cond_init;销毁pthread_cond_destroy;触发pthread_cond_signal;广播pthread_cond_broadcast;等待pthread_cond_wait。