指针
数组地址
代码:
// 数组地址
void test(void)
{
char a[2][100]={0};
char b[100]={0};
printf("%u %u %u %u %u %u %u %u\n",a,a+1,&a+1,a[0],a[1],&a[0]+1,a[0]+1,a[10]);
printf("%u %u %u %u %u %u\n",b,b+1,&b+1,&b[0],&b[1],&b[0]+1);
}
执行结果:
a a+1 &a+1 a[0] a[1] &a[0]+1 a[0]+1 a[10]
3215204272 3215204372 3215204472 3215204272 3215204372 3215204372 3215204273 3215205272
b b+1 &b+1 &b[0] &b[1] &b[0]+1
3215204472 3215204473 3215204572 3215204472 3215204473 3215204473
可以看出多维数组的地址 a+1,&a+1,&a[0]+1有区别,a+1和&a[0]+1增加100,&a+1增加200
一维数组b+1,&b+1有区别,b+1增加1,&b+1增加100
结构体地址
void test(void)
{
struct ST
{
char a[5];
char b[5];
};
struct ST testSt[2];
printf("%u %u %u\n",&testSt,&testSt[0]+1,&testSt+1);
}
执行结果:
&testSt &testSt[0]+1 &testSt+1
3218817404 3218817414 3218817424
可以看出结构体的地址 &testSt[0]+1,&testSt+1有差别
数组和结构体的名称加了取地址符&,则代表整个结构
带上[],则代表相应的维度
结构体
对齐
位域
struct {
unsigned char x1 : 2;
unsigned char x2 : 2;
unsigned char x3 : 2;
unsigned char x4 : 2;
} test;
该结构体大小为1字节
struct {
unsigned int x1 : 2;
unsigned int x2 : 14;
unsigned int x3 : 7;
unsigned int x4 : 9;
} test;
该结构体大小为4字节
Linux
线程函数
线程创建
pthread_t tid;
线程的属性设置
struct sched_param param;
/* 线程属性变量的初始化 /
pthread_attr_init(&attr);
|分离
|调度策略
/ 设置线程是否继承创建者的调度策略 PTHREAD_EXPLICIT_SCHED:不继承才能设置线程的调度策略*/
pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
/* 设置线程的调度策略:SCHED_FIFO:抢占性调度; SCHED_RR:轮寻式调度;SCHED_OTHER:非实时线程调度策略*/
pthread_attr_setschedpolicy(&attr, SCHED_RR);
|优先级
拥有1-99个静态优先级,数字越大,优先级越高
param.sched_priority = 1;
线程退出
几种退出方式的区别:return,pthread_exit ,pthread_cancel,
return pthread_exit:作用相同
- 从线程函数return。这种方法对主线程不适用,从main函数return相当于调用exit。//线程return
- 一个线程可以调用pthread_cancel终止同一进程中的另一个线程。//被动终止
- 线程可以调用pthread_exit终止自己。//自己终止
线程资源回收
Linux系统中程序的线程资源是有限的,表现为对于一个程序其能同时运行的线程数是有限的。而默认的条件下,一个线程结束后,其对应的资源不会被释放,于是,如果在一个程序中,反复建立线程,而线程又默认的退出,则最终线程资源耗尽,进程将不再能建立新的线程。
解决这个问题,有2种方式,系统自动释放线程资源(分离),或者由另一个线程释放该线程资源(pthread_join)。
线程分离的两种方式
创建线程时设置分离属性
pthread_attr_t attr 创建一个线程属性结构体
pthread_attr_init(&attr); 初始化线程属性
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);// 设置线程属性为分离态
pthread_create(&tid,&attr,fun,NULL);
pthread_attr_destroy() //销毁线程属性
线程外或线程内调用pthread_detach();
线程内采用pthread_detach(pthread_self());
线程外采用pthread_detach(thread_id);
互斥量
进程
进程调度
进程间通信
原文地址:https://www.jb51.cc/wenti/3283972.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。