当前位置: 首页 > news >正文

唐山中企动力做网站如何创立自己的网站

唐山中企动力做网站,如何创立自己的网站,做网站多少钱_西宁君博相约,做盗版小说网站能赚钱不Linux和windows进程同步与线程同步那些事儿#xff08;一#xff09; Linux和windows进程同步与线程同步那些事儿#xff08;二#xff09;#xff1a; windows线程同步详解示例 Linux和windows进程同步与线程同步那些事儿#xff08;三#xff09;#xff1a; Linux线…Linux和windows进程同步与线程同步那些事儿一 Linux和windows进程同步与线程同步那些事儿二 windows线程同步详解示例 Linux和windows进程同步与线程同步那些事儿三 Linux线程同步详解示例 Linux和windows进程同步与线程同步那些事儿四windows 下进程同步 Linux和windows进程同步与线程同步那些事儿五Linux下进程同步 在Linux中线程同步可以通过多种机制来实现其中最常见的包括互斥锁mutex、条件变量condition variable和信号量semaphore。 1. 互斥锁Mutex 互斥锁是最常用的线程同步机制它可以确保在同一时间只有一个线程可以访问共享资源。 在Linux中可以使用pthread_mutex_t类型的互斥锁来实现线程同步。 代码示例 #include stdio.h #include pthread.hint global_variable 0; pthread_mutex_t mutex PTHREAD_MUTEX_INITIALIZER;void* thread_function(void* arg) {for (int i 0; i 1000; i) {// 加锁pthread_mutex_lock(mutex);// 修改全局变量global_variable;// 解锁pthread_mutex_unlock(mutex);}return NULL; }int main() {pthread_t thread1, thread2;// 初始化mutexpthread_mutex_init(mutex, NULL);// 创建两个线程pthread_create(thread1, NULL, thread_function, NULL);pthread_create(thread2, NULL, thread_function, NULL);// 等待线程结束pthread_join(thread1, NULL);pthread_join(thread2, NULL);// 销毁mutexpthread_mutex_destroy(mutex);printf(Global variable value: %d\n, global_variable);return 0; } 2. 条件变量Condition Variable 条件变量用于线程间的通信和同步允许线程等待某个特定条件的发生。 在Linux中可以使用pthread_cond_t类型的条件变量来实现线程同步。 条件变量是一种同步机制它允许线程在满足特定条件之前等待并在条件满足时被其他线程通知。 示例代码演示如何使用条件变量来控制多线程修改全局变量的值 #include stdio.h #include pthread.hint global_var 0; pthread_mutex_t mutex PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond PTHREAD_COND_INITIALIZER;void* thread_function(void* arg) {int new_value *(int*)arg;pthread_mutex_lock(mutex);// 等待条件满足while (global_var ! 0){pthread_cond_wait(cond, mutex);}// 修改全局变量的值global_var new_value;printf(Thread %d has modified global_var to %d\n, pthread_self(), global_var);// 通知其他线程条件已经满足pthread_cond_broadcast(cond);pthread_mutex_unlock(mutex);return NULL; }int main() {pthread_t thread1, thread2;int value1 123, value2 456;// 创建两个线程pthread_create(thread1, NULL, thread_function, value1);pthread_create(thread2, NULL, thread_function, value2);pthread_join(thread1, NULL);pthread_join(thread2, NULL);printf(Final value of global_var is %d\n, global_var);return 0; }在上面的代码中有两个线程分别调用thread_function函数。此函数接收一个整数参数作为新的全局变量值。线程首先获得互斥锁并进入临界区然后使用pthread_cond_wait函数等待条件满足。只有当全局变量global_var的值为0时线程才被允许修改这个变量的值。一旦满足这个条件线程就会修改全局变量的值并通过pthread_cond_broadcast函数通知其他等待这个条件的线程。最后线程释放互斥锁并退出。 在main函数中我们创建了两个线程并等待它们完成。然后我们打印最终的全局变量值。 通过使用条件变量我们可以确保全局变量只能在满足特定条件时被修改从而避免竞态条件和数据竞争的问题。 请注意上述代码只是一个示例用于说明如何使用条件变量来控制多线程修改全局变量的值。在实际的应用中您可能还需要考虑其他方面如错误处理和性能优化等。 3. 信号量Semaphore 信号量是一种经典的线程同步机制它可以用于控制对共享资源的访问。 在Linux中可以使用sem_t类型的信号量来实现线程同步。 在Linux下我们可以使用信号量来实现对多线程修改全局变量的值的控制。信号量是一种用于进程间同步和互斥的机制可以用来控制对共享资源的访问。 信号量可以分为二进制信号量和计数信号量。二进制信号量只能取0或1用于互斥操作。计数信号量可以取多个非负整数值用于同步操作。 下面是一个简单的示例代码实现了两个线程对全局变量进行自增操作的互斥控制 #include stdio.h #include pthread.h #include semaphore.hint global_var 0; sem_t sem;void* thread_func(void* arg) {int i;for (i 0; i 100000; i) {sem_wait(sem); // 等待信号量若为0则阻塞global_var;sem_post(sem); // 释放信号量唤醒等待的线程}return NULL; }int main() {pthread_t thread1, thread2;sem_init(sem, 0, 1); // 初始化信号量初始值为1pthread_create(thread1, NULL, thread_func, NULL);pthread_create(thread2, NULL, thread_func, NULL);pthread_join(thread1, NULL);pthread_join(thread2, NULL);sem_destroy(sem); // 销毁信号量printf(Global variable value: %d\n, global_var);return 0; }在上面的示例中我们首先通过 sem_init 函数初始化了一个计数信号量 sem初始值为1。然后创建了两个线程并通过 pthread_create 函数将其与 thread_func 函数绑定。thread_func 函数中通过 sem_wait 函数等待信号量当信号量的值为0时则阻塞否则减1并继续执行。在对全局变量进行自增操作后通过 sem_post 函数释放信号量唤醒等待的线程。最后通过 sem_destroy 函数销毁信号量。 运行该程序两个线程会对全局变量 global_var 进行自增操作由于信号量的存在每次只能有一个线程能够修改该变量从而实现了对全局变量访问的互斥控制。最终输出的全局变量值应为 200000。 需要注意的是信号量的使用需要谨慎错误的使用可能导致死锁等问题。确保在必要的时候对信号量加锁和解锁并根据实际需求选择合适的信号量类型。 这些线程同步机制都可以通过Linux提供的pthread库来使用。在实际编程中选择合适的线程同步机制取决于具体的应用场景和需求以确保线程间的安全访问和协调。 拓展 在 Linux 中编译依赖 pthread 库的程序可以使用以下命令行表达式来编译 gcc -o output_file source_file.c -lpthread其中output_file 是编译后生成的可执行文件的文件名source_file.c 是需要编译的源代码文件的文件名。 选项 -lpthread 表示链接 pthread 库将其加入到编译过程中。 如果源文件有多个可以将它们一一列出来例如 gcc -o output_file source_file1.c source_file2.c -lpthread
http://www.pierceye.com/news/176780/

相关文章:

  • 58同城长沙回收网站建设长春seo推广
  • 景区网站建设的意义女生学计算机应用技术可以做什么
  • 做律师网站的公司天津公司网站制作
  • 上海建设摩托车官方网站招聘网站数建设
  • 自己制作一个网站需要什么软件安吉网站制作
  • 如何设计服装网站首页网站建设比较好的公司
  • 微信网站的链接标志图片如何做公众号如何创建
  • 建站公司建的网站能改动吗怎样设置默认网站
  • 高并发电商网站开发辽宁省朝阳市做网站
  • 公司做网站有用吗合肥企业快速建站
  • 因脉网站建设公司怎么呀韩国网站开发建设技术特点
  • 网站备案 个人 单位安徽网站建设推广
  • 黔江网站制作网站招标建设
  • 网站注册公司目前最好的引流方法
  • 小米wifi设置网址入口网站通信工程建设网站
  • 深圳专业网站建在线做插画的网站
  • 站长之家网站查询怎么样创建自己的小程序
  • 站酷海报设计图片网站备份怎么做
  • 做网站挣钱么云市场 wordpress
  • 网站域名管理规范seo专员是什么
  • 网站制作+资讯网站特色栏目重要性
  • 网站qq 微信分享怎么做的随州市住房和城乡建设部网站
  • 资源网站建设多少钱手机网站页面文字做多大
  • 烟台专业做网站宜昌教育云网站建设
  • 慕课联盟网站开发实战wordpress怎样修改域名
  • 什么电脑做网站前段用旅游网站建设的利益
  • 做 暧视频在线观看网站花都网站建设设计
  • 黄石企业网站设计服务外包有哪些
  • 团队合作网站网站制作的报价大约是多少
  • 网站在线留言系统能挣钱的平台 正规的