C 多线程编程总结

C语言作为底层编程语言,非常适合于编写多线程程序。在多核CPU的时代,多线程编程可以大大提高程序的执行效率。本文将介绍C语言中的多线程编程,包括线程的创建、线程的同步和互斥、线程的销毁等方面。

一、线程的创建

线程的创建是多线程编程的第一步,创建线程需要用到pthread库。pthread库是Linux下的一个多线程库,是POSIX标准线程API的实现。

在使用pthread库时,需要在程序中包含头文件#include。下面是一个创建线程的示例代码:

```

#include

#include

#include

/* 线程函数 */

void *myThread(void *arg)

{

int i;

for (i = 0; i < 10; i++) {

printf("Thread function is running. Argument was %s\n", (char *)arg);

}

pthread_exit(NULL); /* 线程退出 */

}

int main()

{

pthread_t tid;

int ret;

char *msg = "Hello Thread";

/* 创建线程 */

ret = pthread_create(&tid, NULL, myThread, (void *)msg);

if (ret != 0) {

printf("Thread creation failed.\n");

exit(EXIT_FAILURE);

}

pthread_join(tid, NULL); /* 等待线程结束 */

printf("Thread execution is over.\n");

return 0;

}

```

上述代码中,调用pthread_create()函数创建一个新的线程。它的参数依次为:

1. 一个pthread_t类型的变量,用于存储线程ID。

2. 线程的属性,通常为NULL。

3. 线程函数,指向线程要执行的函数。

4. 传递给线程函数的参数。

线程函数可以返回任何数据类型,但是通常是void类型。在线程函数中,可以通过pthread_exit()函数退出线程。

二、线程的同步和互斥

在多线程编程中,线程之间的协作和同步是非常重要的,因为多个线程同时执行可能会引发问题。为了解决这个问题,需要使用同步机制来控制线程的执行。

互斥锁是一种最常用的同步机制。它可以保护关键代码段,使得只有一个线程可以执行该代码段。下面是一个使用互斥锁的示例代码:

```

#include

#include

#include

/* 全局变量 */

int count = 0;

pthread_mutex_t lock;

/* 线程函数 */

void *myThread(void *arg)

{

int i;

for (i = 0; i < 10; i++) {

pthread_mutex_lock(&lock); /* 加锁 */

count++;

printf("Thread function is running. Count is %d\n", count);

pthread_mutex_unlock(&lock); /* 解锁 */

}

pthread_exit(NULL);

}

int main()

{

pthread_t tid1, tid2;

int ret;

/* 初始化互斥锁 */

pthread_mutex_init(&lock, NULL);

/* 创建线程 */

ret = pthread_create(&tid1, NULL, myThread, NULL);

if (ret != 0) {

printf("Thread creation failed.\n");

exit(EXIT_FAILURE);

}

ret = pthread_create(&tid2, NULL, myThread, NULL);

if (ret != 0) {

printf("Thread creation failed.\n");

exit(EXIT_FAILURE);

}

pthread_join(tid1, NULL); /* 等待线程结束 */

pthread_join(tid2, NULL);

pthread_mutex_destroy(&lock); /* 销毁互斥锁 */

printf("Thread execution is over.\n");

return 0;

}

```

上述代码中,使用pthread_mutex_lock()函数对临界区加锁,使用pthread_mutex_unlock()函数解锁。

三、线程的销毁

线程的销毁是多线程编程中的另一个重要方面。在线程结束时,需要使用pthread_join()函数等待线程结束,并且使用pthread_exit()函数退出线程。下面是示例代码:

```

#include

#include

#include

/* 线程函数 */

void *myThread(void *arg)

{

int i;

for (i = 0; i < 10; i++) {

printf("Thread function is running.\n");

}

pthread_exit(NULL); /* 线程退出 */

}

int main()

{

pthread_t tid;

int ret;

/* 创建线程 */

ret = pthread_create(&tid, NULL, myThread, NULL);

if (ret != 0) {

printf("Thread creation failed.\n");

exit(EXIT_FAILURE);

}

pthread_join(tid, NULL); /* 等待线程结束 */

printf("Thread execution is over.\n");

return 0;

}

```

在上述示例代码中,使用pthread_join()函数等待线程结束,确保线程不会在主线程退出之前终止。

四、总结

C语言是一种非常适合编写多线程程序的底层编程语言。pthread库提供了强大的线程函数库,使得多线程编程变得非常方便。在编写多线程程序时,需要注意线程的创建、线程的同步和互斥以及线程的销毁等方面,以确保程序的正确性和可靠性。

壹涵网络我们是一家专注于网站建设、企业营销、网站关键词排名、AI内容生成、新媒体营销和短视频营销等业务的公司。我们拥有一支优秀的团队,专门致力于为客户提供优质的服务。

我们致力于为客户提供一站式的互联网营销服务,帮助客户在激烈的市场竞争中获得更大的优势和发展机会!

点赞(52) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部