多线程之间的通信实例讲解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程之间的通信实例讲解相关的知识,希望对你有一定的参考价值。
多线程之间的通信实例讲解
对于线程来说,说白了,就是一个函数,如果大家对于这章函数都有理解,那我
对于操作系统,线程和进程间的通信会有一个新的认识!接下来我会对每一行代码
进行注释,在此过程中,大家也可以对c语言有一个崭新的认识。
第一个函数,创建两个线程。
#include <stdio.h>
#include <pthread.h> 这个头函数要包含,因为我们后续用的函数都是系统调用,因此需要申请头函数
这样在编译的时候,就可以找到此函数的源文件。
void *myThread1(void) //声明一个指针函数,对于函数指针,和指针函数,对于初学者可能很容易混效,
{ 函数指针相当于有一个指针,指向函数, 指针函数,返回值是一个指针类型的。
int i;
for (i=0; i<100; i++)
{
printf("This is the 1st pthread,created by zieckey.\n");
sleep(1);//Let this thread to sleep 1 second,and then continue to run
}
}
void *myThread2(void)
{
int i;
for (i=0; i<100; i++)
{
printf("This is the 2st pthread,created by zieckey.\n");
sleep(1);
}
}
int main()
{
int i=0, ret=0;
pthread_t id1,id2;
/*创建线程1*/
ret = pthread_create(&id1, NULL, (void*)myThread1, NULL);在这里我们调用了系统创建线程的函数
if (ret) 第一个参数,线程id,第二个类型,可以默认,第三个是线程函数,注意是指针类型的!
{
printf("Create pthread error!\n");
return 1;
}
/*创建线程2*/
ret = pthread_create(&id2, NULL, (void*)myThread2, NULL);
if (ret)
{
printf("Create pthread error!\n");
return 1;
}
pthread_join(id1, NULL); 线程等待函数,和进程的wait()一样的性质
pthread_join(id2, NULL);
return 0;
}
/*******这个函数实现pthread_join()函数************/
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
void *thread(void *str)
{
int i;
for (i = 0; i < 10; ++i)
{
sleep(2);
printf( "This in the thread : %d\n" , i );
}
return NULL;
}
int main()
{
pthread_t pth;
int i;
int ret = pthread_create(&pth, NULL, thread, (void *)(i));
pthread_join(pth, NULL); 第一个参数,等待的线程id
printf("123\n");
for (i = 0; i < 10; ++i)
{
//sleep(1);
printf( "This in the main : %d\n" , i );
}
return 0;
}
/***********线程间的执行顺序**************/
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
void *create(void *arg)
{
printf("new thread is created ... \n");
return (void *)8;
}
int main(int argc,char *argv[])
{
pthread_t tid;
int error;
void *temp;
error = pthread_create(&tid, NULL, create, NULL);
printf("main thread!\n");
if( error )
{
printf("thread is not created ... \n");
return -1;
}
error = pthread_join(tid, &temp);
if( error )
{
printf("thread is not exit ... \n");
return -2;
}
printf("thread is exit code %d \n", (int )temp);
return 0;
}
/***********测试父进程和子线程的id关系***************/
#include <stdio.h>
#include <pthread.h>
#include <unistd.h> /*getpid()*/
void *create(void *arg)
{
printf("New thread .... \n");
printf("This thread‘s id is %u \n", (unsigned int)pthread_self());
printf("The process pid is %d \n",getpid());
return (void *)0;
}
int main(int argc,char *argv[])
{
pthread_t tid;
int error;
printf("Main thread is starting ... \n");
error = pthread_create(&tid, NULL, create, NULL);
if(error)
{
printf("thread is not created ... \n");
return -1;
}
printf("The main process‘s pid is %d \n",getpid());
sleep(1);
return 0;
}
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
void *create(void *arg)
{
char *name;
name=(char *)arg;
printf("The parameter passed from main function is %s \n",name);
return (void *)0;
}
int main(int argc, char *argv[])
{
char *a="zieckey";
int error;
pthread_t tidp;
error=pthread_create(&tidp, NULL, create, (void *)a);
if(error!=0)
{
printf("pthread is not created.\n");
return -1;
}
sleep(1);
printf("pthread is created... \n");
return 0;
}
以上是关于多线程之间的通信实例讲解的主要内容,如果未能解决你的问题,请参考以下文章