当前位置: 首页 > news >正文

自助网站建设开发wordpress安装需要什么

自助网站建设开发,wordpress安装需要什么,wordpress默认后台路径,西安知名高端网站建设服务企业目录 1.进程和线程的概念 2.线程内核三级映射 3.线程优缺点 4.创建线程和获取线程ID的函数 5.创建子线程 6.循环创建N个子线程 7.子线程传参地址错误演示分析 8.主、子线程共享全局变量、堆空间 9.线程退出 10.pthread join回收线程退出值 11.pthread_cancel 12.杀死…

目录

1.进程和线程的概念

2.线程内核三级映射

3.线程优缺点

4.创建线程和获取线程ID的函数

5.创建子线程

6.循环创建N个子线程

7.子线程传参地址错误演示分析

8.主、子线程共享全局变量、堆空间

9.线程退出

10.pthread join回收线程退出值

11.pthread_cancel

12.杀死线程pthread_cancel

13.进程线程对比

14.线程属性简介


1.进程和线程的概念

- Linux 系统中,线程 LWP 称之为:轻量级的进程。
- 进程:有独立的进程地址空间, 有独立的 pcb。 —— 最小资源分配单位。
- 线程:有独立的pcb,没有独立的进程地址空间。(与其他线程共享) —— 最小执行单位。

![1584326812185](课堂笔记10.assets/1584326812185.png)

- 一个创建了线程的进程,本身也沦落 为线程。

![1584327010849](课堂笔记10.assets/1584327010849.png)

- LWP 号: cpu 划分时间片依据。  —— 线程 最小执行单位。
    - 查看LWP号命令: ps -Lf 进程pid 

2.线程内核三级映射

3.线程优缺点

- 优点:
    - 并发性强。  
    - 开销小。
    - 数据通信方便。
- 缺点:
    - 库函数,稳定性差。
    - 调试、编写困难
    - 对信号支持差。
- 结论:既能使用进程开发,也能使用线程开发的程序,首选 线程。

4.创建线程和获取线程ID的函数

```c
#include <pthread.h>
pthread_t pthread_self(void);   // 获取线程id, 在进程内部标识线程身份。

返回线程id。 没有错误!
```

5.创建子线程

```c
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                          void *(*start_routine) (void *), void *arg);
参1: 传出参数,新子线的 线程id
参2: 线程属性。默认传 NULL, 表使用默认属性。
参3: 子线程回调函数。pthread_create 调用成功,该函数会被自动调用起来。
参4: 参3 的参数。
返回值:
    成功:0
    失败:直接返回错误号!

6.循环创建N个子线程

```c
// 子线程主函数
void *tfn(void *arg)
{
    printf("tfn : pid = %d, pthread_id = %lu\n", getpid(), pthread_self());
    return NULL;
}
int main(int argc, char *argv[])
{
    pthread_t tid;

    // 创建子线程
    int ret = pthread_create(&tid, NULL, tfn, NULL);
    if (ret != 0)
        fprintf(stderr, "pthread_create err:%s\n", strerror(ret));

    printf("main : pid = %d, pthread_id = %lu\n", getpid(), pthread_self());
    sleep(1);        // 给子线程执行时间

    return 0;        // 释放

7.子线程传参地址错误演示分析

8.主、子线程共享全局变量、堆空间

// 阻塞 回收线程。
int pthread_join(pthread_t thread, void **retval);
参1:待回收的线程id
参2:传出参数。回收的那个线程的 退出值。
    进程中:main返回值:return 0、 exit(1)  ---> int。 回收进程退出值 wait(int *)
    线程中:线程返回值:pthread_exit --> void *。 回收线程退出值 pthread_join(void **)
返回值:
    成功:0
    失败:直接返回错误号!
```

9.线程退出

```c
// 子线程主题函数
void *tfn(void *arg)
{
    sleep(5);
    //return (void *)74;
    pthread_exit((void *)"hello");
}

int main(int argc, char *argv[])
{
    pthread_t tid;
    //int *retval;    // 用来存储子进程退出值
    char *retval;    // 用来存储子进程退出值

    // 创建子线程
    int ret = pthread_create(&tid, NULL, tfn, NULL);
    if (ret != 0)
        fprintf(stderr, "pthread_create err:%s\n", strerror(ret));

    printf("----------------1\n");
    // 回收子线程退出值
    ret = pthread_join(tid, (void **)&retval);
    if (ret != 0)
        fprintf(stderr, "pthread_join err:%s\n", strerror(ret));

    printf("child thread exit with %s\n", (char *)retval);

    pthread_exit((void *)0);        // 退出主线程
}

10.pthread join回收线程退出值

```c
struct thrd {
    int var;
    char str[256];
};

// 子线程主题函数
void *tfn(void *arg)
{
    struct thrd *tval = (struct thrd *)arg;            //malloc()
    tval->var = 100;
    strcpy(tval->str, "hello thread");

    pthread_exit((void *)tval);
    // return (void *)tval;                // 也可以
}

int main(int argc, char *argv[])
{
    pthread_t tid;
    struct thrd arg, *retval;

    // 创建子线程
    int ret = pthread_create(&tid, NULL, tfn, (void *)&arg);
    if (ret != 0)
        fprintf(stderr, "pthread_create err:%s\n", strerror(ret));

    // 回收子线程退出值
    ret = pthread_join(tid, (void **)&retval);
    if (ret != 0)
        fprintf(stderr, "pthread_join err:%s\n", strerror(ret));
    
    printf("child exit with: var = %d, str= %s\n", retval->var, retval->str);

    // free();
    
    pthread_exit((void *)0);        // 退出主线程
}

```

11.pthread_cancel

- 与进程类似,线程结束时,也有 “僵尸线程” 产生。消耗系统资源。

```c
int pthread_detach(pthread_t thread);  // 设置线程为分离态。
参:待设置为分离的线程id
```

- 设置为 分离态的 线程,在终止时,会自动清理 pcb 内核残留。
- 对于已经分离的线程,使用 pthread_join() 不能正常回收。不能获取线程退出值。

12.杀死线程pthread_cancel

``c
int pthread_cancel(pthread_t thread);
参:待杀死的线程id
```

1. 被 pthread_cancel() 杀死的线程,在使用 pthread_join() 回收,得到的退出值 -1。 
2. pthread_cancel() 杀死线程必须要到达一个 “取消点” (保存点), 才能生效。否则无法杀死线程。
    - 应该在被cancel的线程中,调用 pthread_testcancel() 函数 来 添加 “取消点” (保存点)。

13.进程线程对比

1. return
2. pthread_exit()
3. pthread_cancel()   需要 “保存点”。 —— 进内核,即可得到。

14.线程属性简介

| 线程控制原语     | 进程控制原语   |
| ---------------- | -------------- |
| pthread_create() | fork()         |
| pthread_self()   | getpid()       |
| pthread_exit()   | exit()         |
| pthread_join()   | wait/waitpid() |
| pthread_cancel() | kill()         |
| pthread_detach() |                |
 

http://www.dtcms.com/a/595132.html

相关文章:

  • 辽阳公司做网站郑州网站开发比较好的网络公司
  • 昆凌做的广告买化妆品网站山东闪电建站网
  • 无锡建设网站的公司简介直播网站的建设
  • 北海哪里做网站建设android应用开发基础
  • 网站主页面最开始在哪里做高端网站首页
  • 网站建设与网页设计美食怎样在手机安装wordpress
  • html网页设计环保网站重庆网站开发哪家好
  • 找建站公司电脑怎么制作图片
  • 上门做网站公司哪家好服装公司电子商务网站建设策划书
  • 网站制作费用申请沧州市做网站
  • 做网站有哪些公司好wordpress 与 dede
  • 如何创建微信小程序商店seo网站推广软件
  • OpenAI 悄然上线「网校」OpenAI Academy
  • 免费注册域名的网站外贸公司如何做公司网站
  • 网站页面改版降权wordpress一栏主题
  • Spring5基础教程(1)-- 控制反转(IoC)/自动装配(@Autowired)/Bean容器配置
  • 阿里巴巴企业网站建设网站建设制作费 税前扣除吗
  • 怎么建设手机端网站wordpress+怎么改密码
  • 什么网站做美食最好最专业百度关键词排名点
  • 网站建设与实践高自考公司给了一个邮箱怎么登录
  • 泉州惠安网站建设常德论坛尚一网
  • 深圳市外贸网站自带代理的浏览器
  • 网站icp备案 技术负责人怎么做一个简单的网站
  • wordpress怎样搭建网站鞍山在百度做个网站多少钱
  • 什么是网站ui设计宿迁 网站制作
  • 内蒙古建设厅网站百度只收录栏目不收录网站文章
  • 城乡建设部网站施工员证书查询泉州关键词优化
  • 长尾关键词挖掘工具爱网站黄骅招聘网最新招工信息
  • 网站建设注意哪些方面西安做网站费用
  • 网站添加关键字卡当网站建设