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

高端网站哪个比较好网站设计的素材有哪些

高端网站哪个比较好,网站设计的素材有哪些,1688网站可以做全屏吗,网络营销方案总结目录 1、线程 1.1线程Thread 1.2线程特点 1.3线程函数的原型 1.4Linux对于pthread的API的支持 1.4.1创建一个线程 1.4.2线程的退出 1.5资源分离 2、线程的同步/互斥机制 2.1线程互斥锁 2.1.1初始化线程互斥锁 2.2线程互斥锁的PV 操作 2.2.1P 操作#xff08;上锁…目录 1、线程 1.1线程Thread 1.2线程特点 1.3线程函数的原型 1.4Linux对于pthread的API的支持 1.4.1创建一个线程 1.4.2线程的退出 1.5资源分离 2、线程的同步/互斥机制 2.1线程互斥锁 2.1.1初始化线程互斥锁 2.2线程互斥锁的PV 操作 2.2.1P 操作上锁操作 2.2.2V 操作解锁操作 2.2.3线程互斥锁的销毁操作 3、生产者消费者模型 4、线程条件变量 4.1线程条件变量API 4.1.1初始化/销毁条件变量 4.1.2等待一个条件变量 4.1.3唤醒线程/触发条件变量 谢谢帅气美丽且优秀的你看完我的文章还要点赞、收藏加关注 没错说的就是你不用再怀疑 希望我的文章内容能对你有帮助一起努力吧 1、线程 前面讲到进程为了并发执行任务程序现代操作系统才引进 进程 的概念 分析 创建开销问题创建一个进程开销大 子进程需要拷贝父进程的整个地址空间通信开销问题进程间的通信 需要用第三方如内核P1 - copy - 内核 - copy - P2进程间通信代价或者开销也是很大的。进程的地址空间是独立要通信的话需要用第三方的空 间。 于是就有人提出能不能在 同一个同一个进程内部进程地址空间中进行任务的并发线程/轻量级进程 1.1线程Thread 线程是一个比进程更小的活动单位。它是进程中的执行路径执行分支线程也是并发的一种形式。 进程内部可以存在多个线程它并发执行但是进程内部的所有的线程共享整个进程的地址空间 main 函数进程的主线程 1.2线程特点 创建一个线程要比创建进程开销要小很多 因为创建一个线程的话不需要拷贝进程的地址空间实现线程间的通信会更加方便 因为进程内部所有线程共享整个进程地址空间线程也是一个动态概念 线程进程状态图         就绪态 ready运行态 running阻塞态 blocking有了线程的概念之后 系统的调度单位就从进程变为线程资源的分配还是以进程为单位 线程是进程内部的一个指令的执行分支多个线程就是多个指令序列的并发执行。这些指令必须在函数 内部线程的指令部分肯定是封装一个函数的内部的。这个函数就称之为线程函数一个线程在创 建之后要执行的指令全部封装在该函数内部这个线程函数执行完毕之后该线程的任务也就执行完 了。 1.3线程函数的原型 Thread 的实现有多种比较常见的为 POSIX 线程 pthread 1.4Linux对于pthread的API的支持 1.4.1创建一个线程 pthread_create 创建一个线程启动一个线程 #include iostream #include pthread.h #include unistd.hstatic int st_val 0;/*线程函数用于新线程创建之后调用的 */ void *new_thread(void *data) {for(;st_val 20;st_val){sleep(1);}st_val 0;pthread_exit(st_val); }int main(int argc,const char *argv[]) {// 定义线程id的变量pthread_t tid;// 创建线程int ret pthread_create(tid,NULL,new_thread,NULL);if(ret -1){perror(线程创建失败:);return -1;}// 等待子线程把st_val累加到一百while(1){if(st_val 20)break;std::cout st_val: st_val std::endl;sleep(1);}return 0; } 1.4.2线程的退出 线程函数的退出线程函数的返回在线程执行的任意时刻调用 pthread_exit被别人干掉 cancel 被别人取消其他线程调用 pthread_cancel t1:pthread_cancel(t2) t1 调用取消函数取消 t2 , t2 不一定会被取消 因为 t2 能不能被其他线程取消取决于 t2 线程的一个属性 取消属性 它是否可以被 cancelled #include iostream #include pthread.h #include unistd.hstatic int st_val 0;/*线程函数用于新线程创建之后调用的 */ void *new_thread(void *data) {int oldstate;pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,oldstate);for(;st_val 20;st_val){sleep(1);}st_val 0; }int main(int argc,const char *argv[]) {// 定义线程id的变量pthread_t tid;// 创建线程int ret pthread_create(tid,NULL,new_thread,NULL);if(ret -1){perror(线程创建失败:);return -1;}// 等待子线程把st_val累加到一百while(1){if(st_val 20)break;std::cout st_val: st_val std::endl;if(st_val 5){pthread_cancel(tid);break;}sleep(1);}return 0; }这个属性叫做 可以被取消属性 PTHREAD_CANCEL_ENABLE 表示该线程可以被取消PTHREAD_CANCEL_DISABLE 表示该线程不能被取消 一个线程退出了并不是所有资源都会释放。一个线程的退出它资源释放全部被释放取决于一个属 性 1.5资源分离 detach 分离属性 ENABLE 分离资源属性 该线程结束它的所有资源都会自动释放。DISABLE 不分离资源 该线程结束会有部分资源不会自动释放需要其他线程调用 pthread_join 这个函数 才能完全释放。默认是不分离属性。 #include iostream #include pthread.h #include unistd.hstatic int st_val 0;/*线程函数用于新线程创建之后调用的 */ void *new_thread(void *data) {// 进入线程函数第一时间就设置分离属性// pthread_detach(pthread_self()); // 设置了资源分离一般就不需要join了for(;st_val 20;st_val){sleep(1);}st_val 0;pthread_exit(st_val); }int main(int argc,const char *argv[]) {// 定义线程id的变量pthread_t tid;// 创建线程int ret pthread_create(tid,NULL,new_thread,NULL);if(ret -1){perror(线程创建失败:);return -1;} std::cout 等待线程结束 std::endl;int *tid_ret_val NULL;pthread_join(tid,(void**)tid_ret_val);std::cout return value : *tid_ret_val std::endl;return 0; }2、线程的同步/互斥机制 为了线程之间能够去有序的访问共享资源引用 信号量机制 信号量 System V 和 POSIX 信号量线程互斥锁 2.1线程互斥锁 线程互斥锁也是 信号量 只不过线程互斥锁存在于进程地址空间用于线程间同步和互斥操作线程 互斥锁它的效率相对信号量来说要高。 线程互斥锁使用 pthread_mutex_t 的类型来描述一个锁 安装线程 POSIX 帮助手册 sudo apt-get install manpages-posix-dev // 安装posix 帮助手册 2.1.1初始化线程互斥锁 2.2线程互斥锁的PV 操作 2.2.1P 操作上锁操作 2.2.2V 操作解锁操作 2.2.3线程互斥锁的销毁操作 #include iostream #include pthread.h #include unistd.h// 模拟内存 static int memory 100;// 互斥锁 pthread_mutex_t mutex;// 线程函数模拟病毒 void *thread_trylock(void *data) {// 等待一秒防止线程一进来就直接上锁sleep(1);// 记录自己抢占了多内存int self_memory 0;// 循环条件while(memory 0){// 上锁if(0 pthread_mutex_trylock(mutex)){// 中间的代码就是临界区memory - 10;self_memory 10;sleep(1);// 解锁pthread_mutex_unlock(mutex);std::cout 嘿嘿咱“尝试上锁病毒” 抢占了10字节内存! std::endl;}elsestd::cout 哎咱“尝试上锁病毒”没有抢内存 std::endl;sleep(1);}std::cout 嘿嘿咱“尝试上锁病毒” 总共抢占了 self_memory 字节内存 std::endl;return nullptr; }void *thread_lock(void *data) {// 等待一秒防止线程一进来就直接上锁sleep(1);// 记录自己抢占了多内存int self_memory 0;// 循环条件while(memory 0){// 上锁pthread_mutex_lock(mutex);// 中间的代码就是临界区memory - 10;self_memory 10;sleep(1);// 解锁pthread_mutex_unlock(mutex);std::cout 嘿嘿咱“死锁上锁病毒” 抢占了10字节内存 std::endl;sleep(1);}std::cout 嘿嘿咱“死锁上锁病毒” 总共抢占了 self_memory 字节内存 std::endl;return nullptr; }void *thread_timedlock(void *data) {// 等待一秒防止线程一进来就直接上锁sleep(1);//等待的时间struct timespec tm;tm.tv_sec 1;tm.tv_nsec 0;// 记录自己抢占了多内存int self_memory 0;// 循环条件while(memory 0){// 上锁if(0 pthread_mutex_timedlock(mutex,tm)){// 中间的代码就是临界区memory - 10;self_memory 10;sleep(1);// 解锁pthread_mutex_unlock(mutex);std::cout 嘿嘿咱“等待上锁病毒” 抢占了10字节内存! std::endl;}else{std::cout 哎难受 咱“等待上锁病毒” 等了一秒都没有抢占到内存 std::endl;}sleep(1);}std::cout 嘿嘿咱“等待上锁病毒” 总共抢占了 self_memory 字节内存 std::endl;return nullptr; }int main() {pthread_mutex_init(mutex,NULL);pthread_t tid1;pthread_t tid2;pthread_t tid3;// 启动线程pthread_create(tid1,NULL,thread_lock,NULL);pthread_create(tid1,NULL,thread_trylock,NULL);pthread_create(tid1,NULL,thread_timedlock,NULL);// 阻塞等待子线程结束// pthread_join(tid1,NULL);// pthread_join(tid2,NULL);// pthread_join(tid3,NULL);while(1);pthread_mutex_destroy(mutex);return 0; } 3、生产者消费者模型 生产者消费者模型利用厂商和消费者关系由生产者线程进行生产产生任务再由消费者线程消 费执行任务没有任务的时候消费者等待生产者产生任务。 共享资源的互斥访问问题 信号量/线程互斥锁当缓冲区生产者没有产出的时候没有数据的时候消费者应该怎么办 1. 不停的去测试看有没有数据。 轮询访问但是轮询有缺陷一直在访问浪费CPU资源。轮询有时间差占用总线 Is always busy让出CPU,当有数据的时候再唤醒我 wake up ,线程条件变量 同步 4、线程条件变量 线程条件变量在多线程程序设计中可以用 条件变量 为表示一个特定的条件或者是事件 pthread_cond_t 来描述一个条件变量类型 至于条件变量到底是一个什么事件或者说表示一个什么条件完全由程序猿去解释这个条件变量所代 表的含义 在条件变量上的三种操作 初始化等待一个条件变量等待该条件变量所表示的事件唤醒一个线程/触发条件变量唤醒了正在等待该事件的线程 4.1线程条件变量API 4.1.1初始化/销毁条件变量 4.1.2等待一个条件变量 4.1.3唤醒线程/触发条件变量 注意广播唤醒和单个唤醒的区别 广播唤醒唤醒所有等待的线程去执行任务但是任务可能不够分那么没分到的线程继续休眠单个唤醒随机唤醒一个线程执行任务其他线程继续休眠。 #include iostream #include pthread.h #include unistd.h #include vector using std::vector;// 线程互斥锁 pthread_mutex_t mutex;// 条件变量 pthread_cond_t cond;// 公共资源 FILE *fileNULL; std::string str;// 消费者 void *NiuMa(void *data) {while(1){pthread_mutex_lock(mutex);// 等待条件变量任务pthread_cond_wait(cond,mutex); // 这里卡死不是循环的卡死休眠让出了CPUif(str 退出){pthread_mutex_unlock(mutex); pthread_exit(NULL);}std::cout fwrite(str.c_str(),str.size(),1,file) std::endl;pthread_mutex_unlock(mutex);std::cout pthread_self() 线程成功写入内容 str std::endl;}}// 主线程生产者 int main() {// 初始化pthread_mutex_init(mutex,NULL);pthread_cond_init(cond,NULL);// 打开文件file fopen(./1.txt,w);vectorpthread_t tids(10);// 创建10个线程for(int i 0;i 10;i){pthread_create(tids[0],NULL,NiuMa,NULL);}// 通过输入来发布任务while(1){std::cout 请输入内容: ;pthread_mutex_lock(mutex);std::cin str;pthread_mutex_unlock(mutex);if(str 退出){pthread_cond_broadcast(cond);break;}// 唤醒线程pthread_cond_signal(cond);sleep(1);}for(int i 0;i 10;i){pthread_join(tids[0],NULL);}pthread_mutex_destroy(mutex);pthread_cond_destroy(cond);fclose(file);return 0; }
http://www.hkea.cn/news/14344756/

相关文章:

  • 网站备案人授权2022网页游戏排行榜
  • 广告网站建设报价cordova wordpress
  • 广州建企业网站建站模板工程造价
  • 企业网站怎么做百度广州番禺网站制作公司
  • 那些网站是做金融行业php网站端口
  • 网站平台建设是什么余姚网站建设找哪家
  • 网站编程培训机构排名前十加入电商平台需要多少钱
  • 襄阳云平台网站建设塘厦三正半山酒店
  • 中国贸易网是什么网站建模培训
  • 网站建设项目组织结构图服务器网站绑定域名网站建设
  • 益阳网站seo介绍类网站建设策划书范文
  • 浙江省建设工程协会网站有免费做海报的网站吗
  • 打好代码怎么做网站pc网站开发成app难度
  • 铁汉生态建设有限公司网站创业公司用wordpress
  • 电子商务网站建设域名百度医疗网站建设
  • 宜宾有什么大型网站建设公司WordPress minn主题破解版
  • 建站费用参考萧县做网站
  • 深圳做网站可用乐云seo十年校园网站建设意见表填写
  • 刚刚建设的网站如何放图片wordpress 查看密码
  • 建购物网站需要多少钱大学生创新创业大赛ppt模板
  • 网站代码需要注意什么问题爱站网在线全集私人影视
  • 怎么查找网站后台品牌故事
  • 临沂网站设计制作营销型单页网站
  • 苏州建站公司认准苏州聚尚网络河南搜索引擎推广公司
  • 软件或者网站的搜索怎么做中国商标查询网官网
  • 网站建设工资做微信大转盘有哪些网站
  • 有什么网站可以接手工加工做wordpress 定时发布 原理
  • 红酒公司网站源码电商网站前端模板
  • dnn wordpress网站优化目的
  • 盐城网站开发渠道合作网站建设与维护的试卷