自己做的网站如何上百度,今天的三个新闻,百度推广交了钱不给做网站,公司网站不续费#xff08;1#xff09;线程同步 1#xff09;线程同步#xff1a;指一个线程发出某一个功能运行时#xff0c;在运行还没有结束的时候#xff0c;该调用不返回。同时其它线程为保证数据的一致性#xff0c;不能调用该功能。 2#xff09;多个控制流共同操作一个共享资…1线程同步 1线程同步指一个线程发出某一个功能运行时在运行还没有结束的时候该调用不返回。同时其它线程为保证数据的一致性不能调用该功能。 2多个控制流共同操作一个共享资源的时候都需要同步。 3数据混乱的原因1》资源共享 2》调度随机 3》线程间缺乏必要的同步机制。 前两点无法避免只能从第三点开始优化。
2互斥量mutex 1)linux中提供一把互斥锁mutex互斥量每个线程都是提前对资源操作前都尝试先加锁成功加锁才能操作操作结束后解锁。 2同一个时刻只能有一个线程持有该锁。 3当线程A多某个全局变量加锁访问时B在访问时尝试加锁失败后B阻塞。C线程不加锁访问全局变量可以访问但是数据混乱因此互斥锁又被成为“建议锁”协同锁没有强制限定。
3互斥量及相关函数: pthread_mutex_t类型一个结构体使用时可看做整数。函数成功返回0失败返回错误号。 1pthread_mutex_intit:初始化一个互斥锁互斥量 --初值可看作1 int pthread_mutex_init(pthread_mutex_t*restrict mutex,const pthread_mutexattr_t*restrict attr); 参数1;传出参数待初始化的互斥量。 参数2看成互斥量属性出入参数通常传NULL表示默认属性线程间共享 静态初始化 使用宏初始化 pthread_mutex_t mutexPTHREAD_MUTEX_INITIALIZER; 动态初始化使用函数初始化。 2pthread_mutex_destory:销毁一个互斥锁 int pthread_nutex_destory(pthread_mutex_t *mutex); 3pthread_mutex_lock加锁 尝试加锁加锁不成功则阻塞。 int pthread_nutex_lock(pthread_mutex_t *mutex); 4)pthread_mutex_unlock:解锁 唤醒阻塞所有线程。 int pthread_nutex_unlock(pthread_mutex_t *mutex); 5)pthread_mutex_trylock:尝试加锁 加锁失败后返回错误号不阻塞。 int pthread_nutex_trylock(pthread_mutex_t *mutex);
4加锁解锁测试不同线程实现不同的打印任务 结论在访问共享资源时加锁访问结束后解锁锁的“粒度”越小越好
5死锁 1同一个线程试图多同一个互斥量加锁两次。 2线程1拥有A锁请求B锁线程2拥有B锁请求A锁。