当前位置: 首页> 文旅> 美景 > 天津市建设工程交易网_网页翻译为什么翻译不了_百度推广怎么收费的_软文广告500字

天津市建设工程交易网_网页翻译为什么翻译不了_百度推广怎么收费的_软文广告500字

时间:2025/8/23 22:22:45来源:https://blog.csdn.net/ZGZM9/article/details/145936222 浏览次数:0次
天津市建设工程交易网_网页翻译为什么翻译不了_百度推广怎么收费的_软文广告500字

一、实现方式

        各线程之间栈区独享、并且与进程共享文本段、数据段、堆区,所以可以通过全局变量实现多线程间通信。

int num = 0;                                          //创建一个全局变量void *thread1(void *arg)
{while (1){num = 100;                                    //线程一中给全局变量num赋值100}return NULL;
}void *thread2(void *arg)
{while (1){printf("num = %d\n",num);                     
//由于多个线程之间共享进程的全局变量,所以当线程一运行后,线程二打印的结果num = 100;
//但由于线程之间宏观并行,运行的先后顺序不确定,所以会存在线程二先与运行的情况,当线程二先运行,这里打印结果是num = 0                                                   }return NULL;
}int main(int argc, const char **argv)
{pthread_t tid1;pthread_t tid2;pthread_create(&tid1, NULL, thread1, NULL);pthread_create(&tid2, NULL, thread2, NULL);pthread_join(tid1, NULL);pthread_join(tid2, NULL);return 0;
}

 线程1先执行,线程2后执行的打印情况(线程间的通讯)

二、锁

1、互斥锁

(1)概念

为了防止多线程操作全局变量带来的资源竞争,需要引入互斥锁的概念

 (2)互斥锁函数接口

man 3 pthread_mutex_init

int pthread_mutex_init(pthread_mutex_t *restrict mutex,

                                   const pthread_mutexattr_t *restrict attr);

功能:

        互斥锁的初始化,锁的初始化得放在线程创建之前

参数:

        mutex:互斥锁的首地址,pthread_nutex_t  lock;(得是全局变量),所有线程共用一把锁

        attr:属性,默认为NULL

返回值:

        成功返回0

        失败返回错误码

man 3 pthread_mutex_lock

int pthread_mutex_lock(pthread_mutex_t *mutex);

功能:

        加锁

int pthread_mutex_unlock(pthread_mutex_t *mutex);

功能:

        解锁

int pthread_mutex_destroy(pthread_mutex_t *mutex);

功能:

        销毁互斥锁 ,锁的销毁得放在线程回收之后

两个都不锁 

int num = 0;void *thread1(void *arg)
{while (1){num = 100;}return NULL;
}void *thread2(void *arg)
{while (1){num = 200;printf("%d\n",num);//线程之间宏观并行,微观串行;所以线程在执行的过程中,会出现以下情况://情况一:线程1先执行,线程二后执行//情况二:线程2先执行,线程1后执行//情况三:线程2执行一半后执行线程1,线程1执行一半后执行线程2,即二者交叉执行//所以这里的打印结果是不确定的}return NULL;
}int main(int argc, const char **argv)
{pthread_t tid1;pthread_t tid2;pthread_create(&tid1, NULL, thread1, NULL);pthread_create(&tid2, NULL, thread2, NULL);pthread_join(tid1, NULL);pthread_join(tid2, NULL);return 0;
}

 打印结果:

锁一个 

int num = 0;
pthread_mutex_t lock;void *thread1(void *arg)
{while (1){num = 100;}return NULL;
}void *thread2(void *arg)
{while (1){//锁一个不行,另一个没锁住还是会干扰到被锁住的线程的执行,两个都锁住才能避免冲突//当两个都锁住后,一个执行完毕不代表另一个会一定接着执行,有可能还会执行第二遍刚执行完毕的线程pthread_mutex_lock(&lock);num = 200;printf("num = %d\n", num);pthread_mutex_unlock(&lock);}return NULL;
}int main(int argc, const char **argv)
{pthread_t tid1;pthread_t tid2;pthread_mutex_init(&lock, NULL);pthread_create(&tid1, NULL, thread1, NULL);pthread_create(&tid2, NULL, thread2, NULL);pthread_join(tid1, NULL);pthread_join(tid2, NULL);pthread_mutex_destroy(&lock);return 0;
}

 打印结果:

锁两个 

int num = 0;
pthread_mutex_t lock;void *thread1(void *arg)
{while (1){pthread_mutex_lock(&lock);num = 100;pthread_mutex_unlock(&lock);}return NULL;
}void *thread2(void *arg)
{while (1){pthread_mutex_lock(&lock);num = 200;printf("num = %d\n", num);pthread_mutex_unlock(&lock);}return NULL;
}int main(int argc, const char **argv)
{pthread_t tid1;pthread_t tid2;pthread_mutex_init(&lock, NULL);pthread_create(&tid1, NULL, thread1, NULL);pthread_create(&tid2, NULL, thread2, NULL);pthread_join(tid1, NULL);pthread_join(tid2, NULL);pthread_mutex_destroy(&lock);return 0;}

执行结果

关键字:天津市建设工程交易网_网页翻译为什么翻译不了_百度推广怎么收费的_软文广告500字

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: