一、线程基础
1、定义:
当在进程中创建一个新的线程时,新执行线程将拥有自己栈空间隐刺也有自己的局部变量),但是它与创建者共享全局变量、文件描述符、信号处理函数和当前的目录状态
2、优点:
3、缺点:
4、线程有一套完整的与其有关额函数库,它们中大多数函数名都以pthread_开头,为了使用这些函数库,必须定义宏_REENTRANT,头文件为pthread.h,编译程序额时候用选项-lpthread来链接线程库
二、线程函数
1、创建线程
2、退出线程
3、等待线程
4、线程简单例子:
例子char message[]主线程和子线程共享的变量
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
void *thread_function(void *arg);
char message[] = "Hello World";
int main() {
int res;
pthread_t a_thread;
void *thread_result;
res = pthread_create(&a_thread, NULL, thread_function, (void *)message);
if (res != 0) {
perror("Thread creation failed");
exit(EXIT_FAILURE);
}
printf("Waiting for thread to finish...\n");
res = pthread_join(a_thread, &thread_result);
if (res != 0) {
perror("Thread join failed");
exit(EXIT_FAILURE);
}
printf("Thread joined, it returned %s\n", (char *)thread_result);
printf("Message is now %s\n", message);
exit(EXIT_SUCCESS);
}
void *thread_function(void *arg) {
printf("thread_function is running. Argument was %s\n", (char *)arg);
sleep(3);
strcpy(message, "Bye!");
pthread_exit("Thank you for the CPU time");
}
三、线程同步
1、变量条件同步:
子线程创建后,父子线程是通过CPU在线程快速切换来完成“看起来像是同时执行”的动作,除了线程局部变量外,所有其他的变量都将在一个进程中的所有线程间共享,例子如下:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
void *thread_function(void *arg);
int run_now = 1;
char message[] = "Hello World";
int main() {
int res;
pthread_t a_thread;
void *thread_result;
int print_count1 = 0;
res = pthread_create(&a_thread, NULL, thread_function, (void *)message);
if (res != 0) {
perror("Thread creation failed");
exit(EXIT_FAILURE);
}
while(print_count1++ < 20) {
if (run_now == 1) {
printf("1");
run_now = 2;
}
else {
sleep(1);
}
}
printf("\nWaiting for thread to finish...\n");
res = pthread_join(a_thread, &thread_result);
if (res