一.进程同步及异步的概念
1.同步:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。
2.异步
异步的概念和同步相对。当一个异步过程调用发出后,调用者不会立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
二.代码
1.底层代码
reback.c
#include "reback.h"
//-----------------------底层实现A-----------------------------
typedef struct parameter{
int a ;
pcb callback;
}parameter;
void* callback_thread(void *p1) //此处用的是一个线程
{
pthread_detach(pthread_self());
//do somethings
parameter* p = (parameter*)p1 ;
printf("GetCallBack print! \n");
sleep(3); //延时3秒执行callback函数
p->callback(p->a); //函数指针执行函数,这个函数来自于应用层B
}
int SetCallBackFun(int a, pcb callback)
{
printf("SetCallBackFun print! \n");
parameter p;
p.a = a;
p.callback = callback;
//创建线程
pthread_t thing1;
pthread_create(&thing1,NULL,callback_thread,(void *) &p);
//pthread_join(thing1,NULL); //①
return 0;
}
rebalc.h
#ifndef _REBACK_H_
#define _REBACK_H_
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
typedef void (*pcb)(int a); //函数指针定义,后面可以直接使用pcb,方便
extern int SetCallBackFun(int a, pcb callback);
#endif
2.用户代码
main.c
#include "reback.h"
void fCallBack(int a) // 应用者增加的函数,此函数会在A中被执行
{
//do something
printf("a = %d\n",a);
printf("fCallBack print! \n");
}
int main(void)
{
int ret = SetCallBackFun(4,fCallBack);
printf("ret %d\n",ret);
while(1);
return 0;
}
运行结果
SetCallBackFun print!
ret 0
GetCallBack print!
a = 4
fCallBack print!
当①出代码放出时
就是同步调用了
结果是
SetCallBackFun print!
GetCallBack print!
a = 4
fCallBack print!
ret 0
当然可以设置接口的时候多加个设置是否同步的参数