C++基础知识学习

1.C++中常量指针和 指针常量的区别:
2.内存中高位地址地位地址, 大小端

C++ #include"pthread.h"

pthread_t 创建线程

pthread_create

总述:pthread_create是(Unix、Linux、Mac OS X)等操作系统的创建线程的函数。它的功能是创建线程(实际上就是确定调用该线程函数的入口点),在线程创建以后,就开始运行相关的线程函数。
pthread_create的返回值表示成功,返回0;表示出错,返回表示-1。

pthread_create函数如何创造线程:

#include <pthread.h>
int pthread_create(
        pthread_t *restrict tidp,   //新创建的线程ID指向的内存单元。
        const pthread_attr_t *restrict attr,  //线程属性,默认为NULL
        void *(*start_rtn)(void *), //新创建的线程从start_rtn函数的地址开始运行
        void *restrict arg //默认为NULL。若上述函数需要参数,将参数放入结构中并将地址作为arg传入。
        );

eg: result = pthread_create(&preview_thread, NULL, preview_thread_func, (void *)this)

条件变量和互斥锁一样,都有静态动态两种创建方式,
静态方式使用PTHREAD_COND_INITIALIZER常量,如下:
eg:pthread_cond_t cond=PTHREAD_COND_INITIALIZER

动态方式调用pthread_cond_init()函数,API定义如下:
int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr)
尽管POSIX标准中为条件变量定义了属性,但在LinuxThreads中没有实现,因此cond_attr值通常为NULL,且被忽略。
eg:

pthread_cond_init(&preview_sync, NULL);
pthread_mutex_init(&preview_mutex, NULL);

注销一个条件变量需要调用pthread_cond_destroy(),只有在没有线程在该条件变量上等待的时候才能注销这个条件变量,否则返回EBUSY。因为Linux实现的条件变量没有分配什么资源,所以注销动作只包括检查是否有等待线程。
API定义如下:
int pthread_cond_destroy(pthread_cond_t *cond)

pthread_join

pthread_detacth

pthread_mutex_t互斥锁

pthread_mutex_lock(&preview_mutex)

pthread_mutex_unlock(&preview_mutex)

	pthread_mutex_lock(&preview_mutex);
	{
	   	pthread_cond_signal(&preview_sync);
	}
	pthread_mutex_unlock(&preview_mutex);

pthread_cond_t条件变量

初始化和销毁条件变量的接口是pthread_cond_init()和pthread_cond_destory();
控制“事件”发生的接口是pthread_cond_signal()或pthread_cond_broadcast();
等待“事件”发生的接口是pthead_cond_wait()或pthread_cond_timedwait()

pthread_cond_signal(&preview_sync)

函数的作用是发送一个信号给另外一个正在处于阻塞等待状态的线程,使其脱离阻塞状态,继续执行.
如果没有线程处在阻塞等待状态,pthread_cond_signal也会成功返回。
eg:pthread_cond_signal(&preview_sync);

pthread_cond_wait(&preview_sync, &preview_mutex)

等待与激发

int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)

int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime)

需要写个JNI的类似demo

上一篇:SpringBoot实现万能文件在线预览


下一篇:Linux系统安装jdk12