进程同步用来实现程序并发执行时候的可再现性。
一.进程同步及异步的概念
1.进程同步:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。
2.异步
异步的概念和同步相对。当一个异步过程调用发出后,调用者不会立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
在windows的调用中:

system("notepad");  //同步
ShellExecuteA(0, "open", "notepad", 0, 0, 1);
}   异步
#include <iostream>
#include <cstdlib>
#include <windows.h>
using namespace std;
void openQQ()
    ShellExecuteA(0, "open", "D:\\qq\\Bin\\qq.exe", 0, 0, 1);
void diagonal(HWND win,int i)
    if(i==900){
        return ;
    }else{
        //i+=10;
        SetWindowPos(win,NULL,i,i*5/9,300,400,1);
        Sleep(30);
        diagonal(win,i+10);
void moveQQ()
    HWND win;
    win = FindWindowA("TXGuiFoundation", "QQ");
    if (win == NULL) {
        cout << "not found" << endl;
    else {
        cout << "get it" << endl;
//      while (1) {
//          ShowWindow(win, SW_HIDE);
//          Sleep(2000);
//          ShowWindow(win, SW_SHOW);
//          Sleep(2000);
//      }
        for(int i=0;i<=900;i+=10){
            SetWindowPos(win,NULL,i,0,300,400,1);
            Sleep(30);
            int i=0;
            while(i<=500){
                i+= 10;
                SetWindowPos(win,NULL,900,i,200,400,1);
                Sleep(30);
            int i = 900;
                    Sleep(30);
                    i -= 10;
                    SetWindowPos(win,NULL,i,500,300,400,1);
            }while(i);
            int i =500;
            AA:if(i){
                i-=10;
                SetWindowPos(win,NULL,0,i,300,400,1);
                Sleep(30);
                goto AA;
          diagonal(win,0);
int main()
    //while (1) {
    //  //system("D:\\qq\\Bin\\qq.exe");    //同步
    //  ShellExecuteA(0, "open", "notepad", 0, 0, 1);   //异步
    //  ShellExecuteA(0, "open", "D:\\qq\\Bin\\qq.exe", 0, 0, 1);
    //  Sleep(1000);
    openQQ();
    Sleep(5000);
    //system("D:\\qq\\Bin\\qq.exe");
    moveQQ();
    int x;
    cin>>x;
    return 0;
                    进程同步用来实现程序并发执行时候的可再现性。 一.进程同步及异步的概念 1.进程同步:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。 2.异步 异步的概念和同步相对。当一个异步过程调用发出后,调用者不会立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。 在windows的调用中:system("notepad");  //同步ShellExe
那么就抽了点时间来聊聊他们:
什么是回调函数?
在C语言中,回调函数其实与函数指针的调用在语法上并没有太大的差异,而为什么叫回调函数主要还是从功能上给它起的名字,即这个函数会被"返回来调用"。
而这里所谓的“返回”就涉及到一个方向性问题,从哪里来到哪里去。而在软件中通常就是与“分层设计思想”挂钩的。
在软件设计领域分层.
				
目录非预期结果的全局变量方法一:原子操作使用代码书实现原子操作方法二:控制中断方法三、自旋锁自旋锁定义自旋锁原理方法四、信号量信号量的实现信号量的使用步骤1. 信号量初始化2. 获取信号量3. 代码执行流开始执行相关操作4. 释放信号量代码实现 非预期结果的全局变量 下面这段代码是线程中的函数与中断处理函数对全局变量a进行操作 int a = 0; /* 中断处理程序 */ void interrupt_handle() { /* 线程处理函数 */ void thread_func() {
C语言中,实现软件异步重启通常可以使用以下方法: 1. fork() 函数:可以创建一个子进程,该子进程会复制父进程的代码,数据和文件描述符。可以在子进程中实现异步重启。 2. execve() 函数:可以用于加载一个新的程序在当前进程中,该函数在成功后,将替换当前进程的代码。 以下是一个示例代码,该代码创建了一个子进程,该子进程在某个特定的条件下重启该程序: #include <unistd.h> #include <stdio.h> int main(int argc, char *argv[]) { pid_t pid; int i; for (i = 0; i < 10; i++) { pid = fork(); if (pid == 0) { /* 子进程代码 */ printf("Child process started\n"); sleep(5); execve(argv[0], argv, NULL); printf("Child process restarted\n"); } else { /* 父进程代码 */ printf("Parent process\n"); sleep(1); return 0; 请注意,在实际的生产环境中,应该对重启进行充分测试,并确保重启是正常和可靠的。