2024geekgame
type
status
date
slug
summary
tags
category
icon
password
AI summary
fast or clever
并发与并行
并发是指一个处理器同时处理多个任务。
并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。
并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行
并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。
线程
pthread_create()创建线程
函数原型
pthread_join()函数阻塞当前线程,等待被等待的线程执行完成
函数原型
线程程序
所有子线程都执行完毕,打印了对应的“Hello world ”,但是线程执行的顺序是不固定的,也就是说,我们无法预知打印的顺序。根据代码判断程序的输出就是不可行的,我们只知道输出的内容,但是不知道输出的顺序。
逻辑
简单条件竞争,
read(0, &p, 0x104uLL)
可以写至usleep_time
int usleep(useconds_t usec);//睡眠微秒
1秒 (s)= 1000毫秒(ms)1毫秒 = 1000微秒(us)
使
pthread_create(&newthread, 0LL, do_output, 0LL);
阻塞,运行pthread_create(th, 0LL, get_thread2_input, &p);
改size即可生活在树上
level1
主要逻辑
insert函数
(unsigned int *)(v6 + 16)
存在整数溢出,第三次输-25
导致无限制栈溢出
level2
主要逻辑
(*(void (__fastcall **)(_QWORD, _QWORD))(k + 24))(*(_QWORD *)(k + 8), *(unsigned int *)(k + 16))
调用edit函数,*(_QWORD *)(k + 8)
为a1,*(unsigned int *)(k + 16)
为a2read(0, (void *)(v3 + a1), 8uLL);
存在任意地址写