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

中国平面设计网站大型网络手游游戏排行榜

中国平面设计网站,大型网络手游游戏排行榜,做毕业设计个人网站任务书,试论述外贸网站建设应注意的问题文章目录 线程 pthread线程 vs 进程线程退出 等待 消息传递join:等待,传参void*; exit:退出,对参数赋值void**; 互斥锁 mutex互斥锁mutex条件cond_等待wait、触发signal 控制线程执行 补充: 宏-静态初始化 互斥锁/条件 线程 pthread 线程 vs…

文章目录

      • 线程 pthread
        • 线程 vs 进程
        • 线程退出 等待 消息传递
          • join:等待,传参void*; exit:退出,对参数赋值void**;
        • 互斥锁 mutex
          • 互斥锁mutex+条件cond_等待wait、触发signal 控制线程执行
        • 补充: 宏-静态初始化 互斥锁/条件

线程 pthread

线程 vs 进程

线程:直接用主程序的内存地址,所以如果在线程里改主程序变量,就是直接改;
线程vs进程:
a.比进程快大概30倍,不需要复制完全一样的内存来创建运行,直接使用主程序的内存;
b.没有进程那么健壮,子线程蹦了,就都崩了;
而对进程而言,子进程崩了,父进程不受影响继续执行;

线程退出 等待 消息传递
join:等待,传参void*; exit:退出,对参数赋值void**;
#include <stdio.h>
#include <pthread.h>
#include <string.h>//创建线程
//int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
// 返回:若成功返回0,否则返回错误编号//子线程执行函数func1里的pthread_exit负责将void* 传递给主线程的pthread_joi的void **参数;
//int pthread_exit(void *rval_ptr);// int pthread_join(pthread_t thread, void **rval_ptr);
// 返回:若成功返回0,否则返回错误编号void *func1(void * arg)
{static char data[] = "I am ok! thanks!";printf("t1 id:%d\n",(int)pthread_self());printf("t1 arg data:%s\n",(char* )arg);pthread_exit((void* )data);
}int main()
{pthread_t t1;char arg[] = "Are you ok?";char data1[1024];memset(data1,'\0',sizeof(data1));printf("main id:%d\n",(int)pthread_self());int creatN = pthread_create(&t1,NULL,func1, (void*)arg); //创建其他线程,也是类似操作: 定义好执行函数func2,和传入的形参arg2即可;//pthread_create(&t2,NULL,func2, (void*)arg2); void* ret;pthread_join(t1,&ret);strcpy(data1, (char*)ret);printf("t1 return data:%s\n",data1);return 0;
}
互斥锁 mutex

互斥锁:我上锁,你就不能用了,除非我解锁了,你才能用;
配合线程使用;

互斥锁mutex+条件cond_等待wait、触发signal 控制线程执行

//例:

#include <stdio.h>
#include <pthread.h>
#include <string.h>
#include <unistd.h>/*-----------------------------------------------------*/
// 创建互斥锁变量 
//pthread_mutex_t 锁名
// 初始化及销毁互斥锁
// int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);
// int pthread_mutex_destroy(pthread_mutex_t mutex);
// 返回:若成功返回0,否则返回错误编号//上锁 例:pthread_mutex_lock(&mutex);
//解锁 例:pthread_mutex_unlock(&mutex);/*-----------------------------------------------------*/// 创建条件变量 
//pthread_cond_t 条件名
// 初始化及销毁条件变量
// int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr); //消息只给一个线程
// int pthread_cond_destroy(pthread_cond_t *cond);  //广播给所有线程
// 返回:若成功返回0,否则返回错误编号// 等待
// int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex);
// int pthread_cond_timedwait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, cond struct timespec *restrict timeout);
// 返回:若成功返回0,否则返回错误编号//触发
// int pthread_cond_signal(pthread_cond_t *cond);
// int pthread_cond_broadcast(pthread_cond_t *cond);
// 返回:若成功返回0,否则返回错误编号/*-----------------------------------------------------*/int numNB = 0;
pthread_mutex_t mutex;
pthread_cond_t cond;void *func1(void * arg)
{printf("t1 id:%ld\n",(unsigned long)pthread_self());printf("t1 get main data:%s\n",(char* )arg);while(1){pthread_cond_wait(&cond,&mutex);printf("--------------------\n");printf("t1:%d\n",numNB++);printf("--------------------\n");sleep(1);numNB = 0;}}void *func2(void * arg)
{printf("t2 id:%ld\n",(unsigned long)pthread_self());printf("t2 get main data:%s\n",(char* )arg);while(1){pthread_mutex_lock(&mutex);                printf("t2:%d\n",numNB++);pthread_mutex_unlock(&mutex);if(numNB == 3){pthread_cond_signal(&cond); }     sleep(1);   } 
}int main()
{pthread_mutex_init(&mutex,NULL);pthread_cond_init(&cond,NULL);pthread_t t1,t2;void* ret;char arg[] = "Are you ok?";char data1[1024];memset(data1,'\0',sizeof(data1));int creatN1 = pthread_create(&t1,NULL,func1, (void*)arg);int creatN2 = pthread_create(&t2,NULL,func2, (void*)arg);printf("main id:%ld\n",(unsigned long)pthread_self());pthread_join(t1,&ret);pthread_join(t2,&ret);pthread_mutex_destroy(&mutex);pthread_cond_destroy(&cond);return 0;
}
补充: 宏-静态初始化 互斥锁/条件
//在main函数里,不用宏,pthread_mutex_init() 正常初始化锁/条件的,即为动态初始化
//例:
pthread_mutex_t mutex;
int main()
{pthread_mutex_init(&mutex,NULL);return 0;
}//在定义互斥锁/条件变量时,使用默认宏直接完成初始化,即为静态初始化
//例:
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
http://www.yayakq.cn/news/472321/

相关文章:

  • 杭州网站建设方案杭州公司建设网站
  • 南宁公司网站建设公司哪家好北京网站优化哪家公司好
  • 做网站怎样做才有百度快照自己制作公司官网
  • 网站关于我们的页面网站广告联盟平台
  • 来年做啥网站致富黄山旅游必去十大景点
  • 简述网站建设方法wordpress运行环境搭建以及安装
  • 网站外链建设工作总结html社交网站模板
  • 盐边网站建设设计师网络设计平台
  • 用什么语言做网站wordpress图片备份
  • 建网站多少.net网站吃内存
  • 产品类网站模板深圳黄页
  • 免费网络推广网站大全网站建设公司的市场营销方案模板下载
  • 益阳建设网站数据中心idc机房建设
  • 佛山建站怎么做淘宝上做网站排名
  • 管理咨询公司网站自考大型网站开发工具
  • 网站建设:化工2023年11月流感
  • h5网站用什么软件做企业网站建设工作总结
  • 大眼睛网站建设株洲发布
  • 达州住房与建设局网站wordpress 淘宝客api
  • 新闻门户网站psd模板深圳网站建设大公司
  • 网站手机访问 动易机械加工网站哪个好
  • 做旅游网站课程设计报告网络服务器租用
  • 无锡做网站多少钱天津平台网站建设推荐
  • 织梦网站源文件没有style文件夹怎么修改网站背景网页设计制作网站html代码
  • 做会所网站的深圳龙华区跟进广州政策
  • 公司百度网站怎么做的绿色手机网站模板
  • 网站开发课程建议电子商务网站设计
  • 首页网站怎么做陕西建设教育培训网
  • 网站开发的毕业周记三星网上商城下载
  • 建设银行 网站无法打开手机上怎么使用wordpress