线程和进程的区别
进程:拥有4G独立的虚拟内存 复制数据空间 共享代码区
线程:拥有独立的栈区 同一个进程中的线程共享代码区、数据区、堆区 轻量级的
并发性
一个系统最大的进程数 远远小于 线程的最大数量
线程的函数:
如果函数出错 不会 修改全局的errno 也意味着不能使用perror printf("%m")
都是通过返回值 错误码通过函数返回
统一编程接口: 函数名相同 参数 返回值类型的个数 和 类型 一致
但是底层实现根据不同的平台和操作系统可能不一样
-lpthread
pthread_join
pthread_exit
pthread_detach
pthread_equal
pthread_self
pthread_create
线程分离
理想中状态:
[读取gv的值 + 1 写回到gv中去] 原子操作
文件锁 不同的进程
信号量集
同步: 有先后顺序地执行 排队 影响执行效率 保存数据的正确性和完整性
异步: 各自运行 执行效率快 可能影响数据的正确性和完整性
聊天室
主线程
cfds[cnt++] = fd; 上锁
客户端退出 所对应的线程应该结束了
cfds[i] = cfds[cnt-1]; 上锁
//共享资源
int cfds[]
int cnt;
读数据的值
上锁小
pthread_mutext_t a,b;
死锁
线程1 线程2
lock A lock B
想要lock B 想要lock A 死锁
多个线程对上锁的顺序应该是一样的
释放锁的顺序应该和上锁的顺序相反
线程
概念
pthread.h
libpthread.so
线程创建
线程ID
线程属性
线程过程(执行)函数
线程过程函数的参数
pthread_create
pthread_self
pthread_equal
pthread_t
pthread_attr_t
pthread_join
线程分离
pthread_cancel
pthread_exit
exit结束整个进程
main线程结束->进程结束->所有的线程结束
线程与进程的区别?
进程:重量级的 一个进程里至少有一个线程 一个进程可以有多个线程
线程共享进程的资源(线程只拥有自己独立的栈内存)
线程只是进程的一个执行线程
线程对共享资源的访问
同步问题
互斥量(互斥锁)
pthread_mutex_t
pthread_mutex_init(&mutex,NULL) 和静态初始化一样 在C++会有语法区别
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;//静态初始化
pthread_mutex_destroy
pthread_mutex_lock
pthread_mutex_unlock
pthread_mutex_trylock
pthread_attr_t
pthread_mutex_lock(&lock);
pthread_mutex_lock(&lock);
加锁 --> 解锁
互斥锁死锁情况:
1.不同线程申请普通锁,将按照顺序依次申请锁并加锁 没有解锁
2.一个线程对一个普通锁两次加锁将导致死锁
3.按不同顺序访问互斥锁导致死锁 线程1 A,B 线程2 B,A
本文深入探讨了线程与进程的区别,包括它们的资源管理、并发性、编程接口及线程函数。解析了线程共享资源时的同步问题,如互斥量的使用及其死锁情况,以及线程分离的概念。

被折叠的 条评论
为什么被折叠?



