<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[MeetingParis的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/MeetingParis</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; MeetingParis]]></copyright><item><title><![CDATA[OpenMP 线程互斥锁]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/105619161</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/105619161</guid><author>MeetingParis</author><pubDate>Sun, 19 Apr 2020 17:57:11 +0800</pubDate><description><![CDATA[OpenMP是跨平台的多核多线程编程的一套指导性的编译处理方案(Compiler Directive)，指导编译器将代码编译为多线程程序。

多线程编程中肯定会涉及到线程之间的资源共享问题，就可以使用互斥锁，就是只有获得互斥锁的线程可以执行，其他线程阻塞。

1.OpenMP中的互斥锁函数

　　void omp_init_lock(omp_lock *) 初始化互斥器
...]]></description><category></category></item><item><title><![CDATA[#pragma omp parallel for]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/105006407</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/105006407</guid><author>MeetingParis</author><pubDate>Sat, 21 Mar 2020 11:20:13 +0800</pubDate><description><![CDATA[#pragma omp parallel for

#pragma omp parallel for是OpenMP中的一个指令，表示接下来的for循环将被多线程执行，另外每次循环之间不能有关系。示例如下：

intmain(intargc,char* argv[])

{

#pragmaomp parallelfor //后面是for循环

for(inti = 0; ...]]></description><category></category></item><item><title><![CDATA[在socket编程中使用域名]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/104738027</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/104738027</guid><author>MeetingParis</author><pubDate>Sun, 08 Mar 2020 18:57:34 +0800</pubDate><description><![CDATA[客户端中直接使用 IP 地址会有很大的弊端，一旦 IP 地址变化（IP 地址会经常变动），客户端软件就会出现错误。
而使用域名会方便很多，注册后的域名只要每年续费就永远属于自己的，更换 IP 地址时修改域名解析即可，不会影响软件的正常使用。
关于域名注册、域名解析、host 文件、DNS服务器等本节并未详细讲解，请读者自行脑补。本节重点讲解如何使用域名。

通过域名获取IP地址

域名仅仅是 IP...]]></description><category></category></item><item><title><![CDATA[socket编程实现文件传输功能（Windows）]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/104737841</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/104737841</guid><author>MeetingParis</author><pubDate>Sun, 08 Mar 2020 18:42:36 +0800</pubDate><description><![CDATA[//server
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;winsock2.h&gt;
#pragma comment (lib, "ws2_32.lib") //加载 ws2_32.dll
 
#define BUF_SIZE 1024
 
int main(){
//先检查文件是否存在
char *fi...]]></description><category></category></item><item><title><![CDATA[Linux下的socket演示程序]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/104728118</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/104728118</guid><author>MeetingParis</author><pubDate>Sun, 08 Mar 2020 10:24:42 +0800</pubDate><description><![CDATA[//server.cpp
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;arpa/inet.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;netinet/in....]]></description><category></category></item><item><title><![CDATA[Windows下的socket演示程序]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/104728047</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/104728047</guid><author>MeetingParis</author><pubDate>Sun, 08 Mar 2020 10:22:52 +0800</pubDate><description><![CDATA[//server.cpp
#include &lt;stdio.h&gt;
#include &lt;winsock2.h&gt;
#pragma comment (lib, "ws2_32.lib")  //加载 ws2_32.dll

int main(){
    //初始化 DLL
    WSADATA wsaData;
    WSAStartup( MAKEWORD(2, 2), ...]]></description><category></category></item><item><title><![CDATA[简单排序算法]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/80157820</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/80157820</guid><author>MeetingParis</author><pubDate>Tue, 01 May 2018 17:12:02 +0800</pubDate><description><![CDATA[#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;

void myswap(int array[], int k, int j)
{
	int tmp = array[k];
	array[k] = array[j];
	array[j] = tmp;
}

//选择排序
void Selection_Sort(int array[], int ...]]></description><category></category></item><item><title><![CDATA[#号法创建树]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/80152120</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/80152120</guid><author>MeetingParis</author><pubDate>Mon, 30 Apr 2018 21:10:50 +0800</pubDate><description><![CDATA[#define _CRT_SECURE_NO_WARNINGS
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;

typedef struct BiNode
{
	int data;
	struct BiNode *lchild, *rchild;
}BiNode,*BiTree;

BiNode *BiNode_Create()
{
	BiT...]]></description><category></category></item><item><title><![CDATA[树的非递归中序遍历]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/80150992</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/80150992</guid><author>MeetingParis</author><pubDate>Mon, 30 Apr 2018 18:15:57 +0800</pubDate><description><![CDATA[步骤1：结点的所有路径情况如果结点有左子树，该结点入栈；如果结点没有左子树，访问该结点；步骤2：路径所有情况如果结点有右子树，重复步骤1；如果结点没有右子树（结点访问完毕），回退，让栈顶元素出栈，访问栈顶元素，并访问右子树，重复步骤1如果栈为空，表示遍历结束。#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;string...]]></description><category></category></item><item><title><![CDATA[树的简单遍历、深度、叶子数量、拷贝]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/80150983</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/80150983</guid><author>MeetingParis</author><pubDate>Mon, 30 Apr 2018 18:14:33 +0800</pubDate><description><![CDATA[#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;string.h&amp;gt;

typedef struct BiNode
{
	int data;
	struct BiNode *lchild, *rchild;
}BiNode,*BiTree;


//先序遍历
void preOrder(BiNode *root)
...]]></description><category></category></item><item><title><![CDATA[队列的顺序存储设计与实现]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/80071909</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/80071909</guid><author>MeetingParis</author><pubDate>Tue, 24 Apr 2018 22:33:44 +0800</pubDate><description><![CDATA[//seqlist.h
#ifndef _SEQLIST_H_
#define _SEQLIST_H_

typedef void SeqList;
typedef void SeqListNode;

SeqList* SeqList_Create(int capacity);

void SeqList_Clear(SeqList *list);
void SeqList_Destroy(Se...]]></description><category></category></item><item><title><![CDATA[栈的应用之后缀计算]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/80058593</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/80058593</guid><author>MeetingParis</author><pubDate>Mon, 23 Apr 2018 23:54:18 +0800</pubDate><description><![CDATA[#include &amp;lt;stdio.h&amp;gt;
#include&amp;lt;stdlib.h&amp;gt;
#include &quot;LinkStack.h&quot;

int isNumber(char c)
{
	return c &amp;gt;= '0'&amp;amp;&amp;amp;c &amp;lt;= '9';
}

int isOperator(char c)
{
	return c == '+' || c == '-' || c...]]></description><category></category></item><item><title><![CDATA[栈的应用之中缀转后缀]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/80058568</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/80058568</guid><author>MeetingParis</author><pubDate>Mon, 23 Apr 2018 23:50:39 +0800</pubDate><description><![CDATA[#include &quot;stdio.h&quot;
#include &quot;stdlib.h&quot;
#include &quot;string.h&quot;
#include &quot;linkstack.h&quot;

int isNumber(char c)
{
	return c &amp;gt;= '0' &amp;amp;&amp;amp; c &amp;lt;= '9';
}

int isOperator(char c)
{
	return c == '+' || c ]]></description><category></category></item><item><title><![CDATA[栈的应用之检测括号合法性]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/80058528</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/80058528</guid><author>MeetingParis</author><pubDate>Mon, 23 Apr 2018 23:45:19 +0800</pubDate><description><![CDATA[#include&amp;lt;stdio.h&amp;gt;
#include&quot;linkstack.h&quot;

int isLeft(char c)
{
	int ret = 0;
	switch (c)
	{
	case '&amp;lt;':
	case '(':
	case '[':
	case '{':
	case '\'':
	case '\&quot;':
		ret = 1;
		break;
	default:
		...]]></description><category></category></item><item><title><![CDATA[栈的链式存储设计与实现]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/80041094</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/80041094</guid><author>MeetingParis</author><pubDate>Sun, 22 Apr 2018 18:06:46 +0800</pubDate><description><![CDATA[//linklist.h
#ifndef _LINKLIST_H_
#define _LINKLIST_H_
#include&amp;lt;stdio.h&amp;gt;

typedef void LinkList;
typedef struct _tag_LinkListNode
{
	struct _tag_LinkListNode *next;
}LinkListNode;

LinkList *Lin...]]></description><category></category></item><item><title><![CDATA[栈的顺序存储设计与实现]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/80037799</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/80037799</guid><author>MeetingParis</author><pubDate>Sun, 22 Apr 2018 12:16:59 +0800</pubDate><description><![CDATA[//seqlist.h
#ifndef _SEQLIST_H_
#define _SEQLIST_H_

typedef void SeqList;
typedef void SeqListNode;

SeqList *SeqList_Create(int capacity);
void SeqList_Clear(SeqList *list);
void SeqList_Destroy(Seq...]]></description><category></category></item><item><title><![CDATA[双向链表]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/80033878</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/80033878</guid><author>MeetingParis</author><pubDate>Sat, 21 Apr 2018 21:39:47 +0800</pubDate><description><![CDATA[//dlinklist.h
#ifndef _MY_DLINKLIST_H_
#define _MY_DLINKLIST_H_

typedef void DLinkList;
/*
typedef struct _tag_DLinkListNode DLinkListNode;
struct _tag_DLinkListNode
{
	DLinkListNode* next;
	DLinkLis...]]></description><category></category></item><item><title><![CDATA[循环链表]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/80029963</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/80029963</guid><author>MeetingParis</author><pubDate>Sat, 21 Apr 2018 15:15:20 +0800</pubDate><description><![CDATA[//circlelist.h
#ifndef _CIRCLELIST_H_
#define _CIRCLELIST_H_

typedef void CircleList;
/*
typedef struct _tag_CircleListNode CircleListNode;
struct _tag_CircleListNode
{
	CircleListNode* next;
};
*/
t...]]></description><category></category></item><item><title><![CDATA[线性表顺序存储结构]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/79982800</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/79982800</guid><author>MeetingParis</author><pubDate>Tue, 17 Apr 2018 23:42:19 +0800</pubDate><description><![CDATA[//seqlist.h
#ifndef  __MY_SEQLIST_H__ 
#define __MY_SEQLIST_H__

typedef void SeqList;
typedef void SeqListNode;

SeqList* SeqList_Create(int capacity);

void SeqList_Destroy(SeqList* list);

void Seq...]]></description><category></category></item><item><title><![CDATA[线性表链式存储]]></title><link>https://blog.youkuaiyun.com/MeetingParis/article/details/79982788</link><guid>https://blog.youkuaiyun.com/MeetingParis/article/details/79982788</guid><author>MeetingParis</author><pubDate>Tue, 17 Apr 2018 23:40:03 +0800</pubDate><description><![CDATA[//linklist.h
#ifndef _MYLINKLIST_H_
#define _MYLINKLIST_H_

typedef void LinkList;
/*
typedef struct _tag_LinkListNode LinkListNode;
struct _tag_LinkListNode
{
LinkListNode* next;
};
*/

typedef struc...]]></description><category></category></item></channel></rss>