兰州网站建设推荐q479185700上快网站没排名怎么办

news/2025/10/6 13:54:18/文章来源:
兰州网站建设推荐q479185700上快,网站没排名怎么办,品建设,百度学术论文查重官网系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦#xff01;#xff01;#xff01; 现在的一切都是为将来的梦想编织翅膀#xff0c;让梦想在现实中展翅高飞。 Now everythi…系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦 现在的一切都是为将来的梦想编织翅膀让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. Linux 多线程并发Socket服务端的实现 系列文章目录一、Linux线程的介绍二、多线程并发服务端的实现 一、Linux线程的介绍 1头文件 #include pthread.h 2创建线函数 int pthread_create( pthread_t * restrict thread, const pthread_attr_t * restrict attr, void* (* start_routine)(void *), void * restrict arg ); 成功时返回0失败时返回其他值。 – thread : 保存新创建线程ID的变量地址。区分不同线程 – attr : 用于传递线程属性的参数传递NULL时创建默认属性的线程 – start_routine : 相当于线程main函数的、在单独执行流中执行的函数的地址值函数指针 – arg : 通过第三个函数传递调用函数时包含传递参数信息的变量地址值。 调用pthread_join函数 - 与之聚合等待线程终止 int pthread_join(pthread_t thread, void ** status); 成功时返回0失败时返回其他值。 – thread : 该参数值ID的线程终止后才会从该函数返回 – status : 保存线程的main函数返回值的指针变量地址值。 调用pthread_detach函数 - 与之分离 int pthread_detach(pthread_t thread); 成功时返回0失败时返回其他值。 – thread 终止的同时需要销毁的线程ID。 3互斥量 int pthread_mutex_init(pthread_mutex_t * mutex, const pthread_mutex * attr); int pthread_mutex_destroy(pthread_mutex_t * mutex); 成功时返回0失败时返回其他值。 – mutex 创建互斥量时传递保存互斥量的变量地址值销毁时传递需要销毁的互斥量的地址值 – attr 传递即将创建的互斥量属性没有特别需要指定的属性时传递NULL。 int pthread_mutex_lock(pthred_mutex_t * mutex); int pthread_mutex_unlock(pthread_mutex_t * mutex); 成功时返回0失败时返回其他值。 互斥量锁。 4信号量 #include semaphore.h int sem_init (sem_t * sem, int pshared, unsigned int value); int sem_destroy (sem_t * sem); 成功时返回0失败时返回其他值。 – sem :创建信号时传递保存信号量的变量的地址值销毁时传递需要销毁的信号量变量地址值 – pshared :传递其他值时创建可由多个进程共享的信号量传递0时创建只允许1个进程内部使用的信号量 – value :指定新创建信号量的初始值。 int sem_post (sem_t * sem); int sem_wait (sem_t * sem); 成功时返回0失败时返回其他值。 – sem :传递保存信号量读取值的变量地址值传递给sem_post时信号量增1传递给sem_wait时信号量减1,信号值不能小于0因此在信号量为0的时候调用sem_wait函数时线程进入阻塞状态。 二、多线程并发服务端的实现 如下介绍是多个客户端之间可以交换信息的简单的聊天程序不是严格的商业代码。 chart_server.c #includestdio.h #includestdlib.h #includestring.h #includeunistd.h #includearpa/inet.h #includesys/socket.h #includefcntl.h #includeerrno.h #includepthread.h #define BUF_SIZE 100 #define MAX_CLNT 256void * handle_clnt(void * arg); void send_msg(char * msg, int len); void error_handling(char * msg); int clnt_cnt 0; int clnt_socks[MAX_CLNT]; pthread_mutex_t mutex;int main(int argc, char *argv[]) {//用来管理接入的客户端套接字的变量和数组。访问这两个变量的代码将构成临界区int serv_sock, clnt_sock; struct sockaddr_in serv_adr, clnt_adr;int clnt_adr_sz;pthread_t t_id;if(argc ! 2){printf(Usage : %s port \n, argv[0]);exit(1);}pthread_mutex_init(mutex, NULL);serv_sock socket(PF_INET, SOCK_STREAM, 0);memset(serv_adr, 0, sizeof(serv_adr));serv_adr.sin_family AF_INET;serv_adr.sin_addr.s_addr htonl(INADDR_ANY);serv_adr.sin_port htons(atoi(argv[1]));if(bind(serv_sock, (struct sockaddr *) serv_adr, sizeof(serv_adr)) -1)error_handling(bind() error);if(listen(serv_sock, 5) -1)error_handling(listen() error);while(1){clnt_adr_sz sizeof(clnt_adr);clnt_sock accept(serv_sock, (struct sockaddr *)clnt_adr, clnt_adr_sz);pthread_mutex_lock(mutex);//每当有新的连接时将相关信息写入变量clnt_cnt和clnt_socksclnt_socks[clnt_cnt] clnt_sock;pthread_mutex_unlock(mutex);//创建线程向新连入的客户端提供服务pthread_create(t_id, NULL, handle_clnt, (void*)clnt_sock);//调用pthread_detach函数从内存中完全销毁已终止的线程pthread_detach(t_id);printf(Connected client IP: %s \n, inet_ntoa(clnt_adr.sin_addr));}close(serv_sock);return 0; }void * handle_clnt(void * arg) {int clnt_sock *((int*)arg);int str_len 0, i;char msg[BUF_SIZE];while((str_len read(clnt_sock, msg, sizeof(msg))) ! 0)send_msg(msg, str_len);pthread_mutex_lock(mutex);for(i 0; i clnt_cnt; i) //remove disconnected client{if(clnt_sock clnt_socks[i]){while(i clnt_cnt - 1)clnt_socks[i] clnt_socks[i 1];break;}}clnt_cnt--;pthread_mutex_unlock(mutex);close(clnt_sock);return NULL; }//该函数负责向所有客户端发送消息 void send_msg(char *msg, int len) // send to all {int i;pthread_mutex_lock(mutex);for(i 0; i clnt_cnt; i)write(clnt_socks[i], msg, len);pthread_mutex_unlock(mutex); }void error_handling(char *msg) {fputs(msg, stderr);fputc(\n, stderr);exit(1); }chat_clnt.c #includestdio.h #includestdlib.h #includestring.h #includeunistd.h #includearpa/inet.h #includesys/socket.h #includefcntl.h #includeerrno.h #includepthread.h #define BUF_SIZE 100 #define NAME_SIZE 20void * send_msg(void *arg); void * recv_msg(void *arg); void error_handling(char *msg);char name[NAME_SIZE] [DEFAULT]; char msg[BUF_SIZE];int main(int argc, char *argv[]) {int sock;struct sockaddr_in serv_addr;pthread_t snd_thread, rcv_thread;void *thread_return;if(argc ! 4){printf(Usage : %s IP port name \n, argv[0]);exit(1);}sprintf(name, [%s], argv[3]);sock socket(PF_INET, SOCK_STREAM, 0);memset(serv_addr, 0, sizeof(serv_addr));serv_addr.sin_family AF_INET;serv_addr.sin_addr.s_addr inet_addr(argv[1]);serv_addr.sin_port htons(atoi(argv[2]));if(connect(sock, (struct sockaddr *)serv_addr, sizeof(serv_addr)) -1)error_handling(connect() error);pthread_create(snd_thread, NULL, send_msg, (void *)sock);pthread_create(rcv_thread, NULL, recv_msg, (void *)sock);pthread_join(snd_thread, thread_return);pthread_join(rcv_thread, thread_return);close(sock);return 0; }void *send_msg(void *arg) //send thread main {int sock *((int *)arg);char name_msg[NAME_SIZE BUF_SIZE];while(1){fgets(msg, BUF_SIZE, stdin);if(!strcmp(msg, q\n) || !strcmp(msg, Q\n)){close(sock);exit(0);}sprintf(name_msg, %s %s, name, msg);write(sock, name_msg, strlen(name_msg));}return NULL; }void *recv_msg(void * arg) //read thread main {int sock *((int *) arg);char name_msg[NAME_SIZE BUF_SIZE];int str_len;while(1){str_len read(sock, name_msg, NAME_SIZE BUF_SIZE - 1);if(str_len -1)return (void *) - 1;name_msg[str_len] 0;fputs(name_msg, stdout);}return NULL; }void error_handling(char *msg) {fputs(msg, stderr);fputc(\n, stderr);exit(1); } 运行结果如下 图1_1 聊天室运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析:C++:内存管理

深入解析:C++:内存管理pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &qu…

电商手机网站开发非国产手机浏览器

切洋葱时,由于洋葱有一种挥发物质,常使切菜的人流泪。防止的方法是: 1.在切洋葱前,把切菜刀在冷水中浸一会儿,再切时就不会因受挥发物质刺激而流泪了。 2.将洋葱对半切开后,先泡一下凉水再切,就不会流泪了. 3.放微波炉…

大数求余

大数求余问题: 在仅使用 int32 类型存储的前提下, 计算 \(x^a\ \text{mod}\ p\) (即 \(x^a\ \%\ p\)). 基本的运算规则: \((xy)\ \%\ p = [(x \ \% \ p)(y \ \% \ p)] \ \% \ p\) 循环求余 当 \(x < p\) 时, \[x^a …

网站开发需要研究什么门户网站 开发注意

vmware虚化优势VMWARE服务器虚拟化介绍利用虚拟化基础架构技术&#xff0c;可以不断整合工作负载&#xff0c;从而充分利用服务器并降低运营成本。该基础架构技术不但使系统管理员能够管理更多的服务器&#xff0c;而且在置备新的软件服务和维护现有软件服务时&#xff0c;具有…

visual studio 无法打开文件

55>已完成生成项目“306_EigenDecomposition_bin.vcxproj”的操作 - 失败。 56>LINK : fatal error LNK1104: 无法打开文件“..\..\Debug\glad.lib”文件夹权限问题

vulkan游戏引擎renderer_backend实现 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

详细介绍:【使用】【经验】docker 清理未使用的镜像的命令

详细介绍:【使用】【经验】docker 清理未使用的镜像的命令pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consol…

关于网站制作报价微信小程序自助建站

作者&#xff1a;刘志勇&#xff0c;本文来自新浪微博视频平台资深架构师刘志勇在 LiveVideoStackCon 2018 讲师热身分享&#xff0c;并由 LiveVideoStack 整理而成。 本文从设计及服务可用性方面&#xff0c;详细解析了微博短视频高可用、高并发架构设计中的问题与解决方案。…

怎么建设局域网网站展示照片的网站

数环通让您可以通过不到几分钟的时间即可实现RSS订阅与Notion的对接与集成&#xff0c;从而高效实现工作流程自动化&#xff0c;降本增效&#xff01; 1.产品介绍 RSS订阅是数环通的内置应用&#xff0c;很多用户通过RSS订阅来收集自己在各大平台上看的内容&#xff0c;当RSS…

基于MPPT算法的光伏并网发电系统simulink建模与仿真

1.课题概述 基于MPPT算法的光伏并网发电系统simulink建模与仿真,包括PV光伏发电模块,并网电路,MPPT,PWM等模块。 2.系统仿真结果 3.核心程序与模型版本:MATLAB2022a 4.系统原理简介 光伏并网逆变器…

实用指南:【系统架构设计师】2025年上半年真题论文回忆版: 论系统负载均衡设计方法(包括解题思路和参考素材)

实用指南:【系统架构设计师】2025年上半年真题论文回忆版: 论系统负载均衡设计方法(包括解题思路和参考素材)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; dis…

软件版悟空博弈+WAUC构筑元人文演化之路研究报告——声明Ai研究

软件版悟空博弈+WAUC构筑元人文演化之路研究报告 一、引言:从价值对齐到价值弥漫的范式革命 在AI伦理的探索中,我们长期受困于"价值对齐"的范式——试图将一套预设的、静态的人类价值,"灌装"进…

可以自己做网站卖东西梧州论坛手机红豆网

实现一个一遍扫描的编译前端&#xff0c;将简化高级语言的部分语法成分&#xff08;含赋值语句、分支语句、循环语句等&#xff09;翻译成四元式&#xff08;或三地址代码&#xff09;&#xff0c;还要求有合理的语法出错报错和错误恢复功能。 测试样例 beginwhile a<b do…

温州建网站公司哪家好wordpress 做的网站

IP协议处于OSI参考模型的第三层——网络层&#xff0c;网络层的主要作用是实现终端节点间的通信。IP协议是网络层的一个重要协议&#xff0c;网络层中还有ARP(获取MAC地址)和ICMP协议(数据发送异常通知) 数据链路层的作用在于实现同一种数据链路下的包传递&#xff0c;而网络层…

Linux 中 m、mm、mmm 函数和 make 的区别 - 详解

Linux 中 m、mm、mmm 函数和 make 的区别 - 详解2025-10-06 13:20 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display…

做cad室内平面图的家具素材网站重庆怎么推广企业网站

C语言允许宏带有参数。在宏定义中的参数称为“形式参数”&#xff0c;在宏调用中的参数称为“实际参数”&#xff0c;这点和函数有些类似。 对带参数的宏&#xff0c;在展开过程中不仅要进行字符串替换&#xff0c;还要用实参去替换形参。 带参宏定义的一般形式为&#xff1a…

详细介绍:学习STC51单片机27(芯片为STC89C52RCRC)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

[KaibaMath1001] 关于∀ε0,|a-b|ε = a=b的证明

[KaibaMath1001] 关于∀ε>0,|a-b|<ε => a=b的证明摘要:如能理解|a - b| < ε => a = b,则就可以轻松理解数列极限或函数极限的定义。 # 1 关于∀ε>0,|a - b| < ε => a = b的证明 # …

基于Web的分布式图集管理系统架构设计与实践 - 教程

基于Web的分布式图集管理系统架构设计与实践 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…