linux C语言

指针

数组地址

代码

// 数组地址
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:作用相同

  1. 从线程函数return。这种方法对主线程不适用,从main函数return相当于调用exit。//线程return
  2. 一个线程可以调用pthread_cancel终止同一进程中的另一个线程。//被动终止
  3. 线程可以调用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);

互斥量

进程
进程调度

进程间通信

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...