linux線程學習初步02

  1. 殺死線程的函數
int pthread_cancel(pthread_t thread);
參數介紹:需要輸入的tid
返回值:識別返回 errno成功返回 0
被殺死的線程,退出狀態值為一個
#define PTHREAD_CANCELED((void *)-1)

代碼案例:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>void* thr(void *arg) {while(1) {printf("I am a common thread\n");sleep(1);}return 100;
}int main() {pthread_t ptid;pthread_create(&ptid, NULL, thr, NULL);sleep(5);void *ret;pthread_cancel(ptid);int num = pthread_join(ptid, &ret);printf("num = %d, ret = %d\n",num , (int)ret);return 0;
}
``2. 線程分離函數```cppint pthread_detach(pthread_t thread);

使用了線程分離函數, 該線程不用再被
pthread_join函數回收資源

代碼案例:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <string.h>void* thr(void *arg) {printf("I am a common thread  1\n");sleep(3);printf("I am a common thread  1-\n");return (void *)100;
}int main() {pthread_t ptid;pthread_create(&ptid, NULL, thr, NULL);pthread_detach(ptid);sleep(4);int ret = pthread_join(ptid, NULL);printf("ret = %d error is %s\n",ret, strerror(ret));return 0;
}
  1. 比較兩個線程id是否相等
int pthread_equal(pthread_t t1, pthread_t t2);

線程id在進程內部是唯一的, 但是在整個操作系統中不是唯一的

  1. 線程屬性設置
初始化線程屬性
int pthread_attr_init(pthread_attr_t *attr);銷毀線程屬性
int pthread_attr_destroy(pthread_attr_t *attr);

設置線程分離

int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
參數介紹:attr:init初始化的屬性detachstate:PTHREAD_CREATE_DETACHEDThreads that are created using attr will be created in a detached state.PTHREAD_CREATE_JOINABLEThreads that are created using attr will be created in a joinable state.int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate);

發現,設置成為線程分離后, 主線程如果先執行完了, 子線程沒有機會執行
代碼案例:

nclude <unistd.h>
#include <pthread.h>
#include <string.h>void* thr(void *arg) {sleep(2);printf("I am a common thread  1\n");return (void *)100;
}int main() {pthread_attr_t attr;pthread_attr_init(&attr);pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);pthread_t ptid;pthread_create(&ptid, &attr, thr, NULL);printf("I am a main thread\n");pthread_attr_destroy(&attr);pthread_exit(NULL);// 如果不加這句話,自線程沒有機會打印
}

getconf GNU_LIBPTHREAD_VERSION 查看版本

注意事項:
被join線程可能在join函數返回前,就釋放完自己所有的內存資源,所以不應當回收線程棧中的值

malloc和mmap申請的內存可以被其他線程釋放

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382499.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382499.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382499.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python的文件基本操作和文件指針

讀寫模式的基本操作 https://www.cnblogs.com/c-x-m/articles/7756498.html r,w,a r只讀模式【默認模式&#xff0c;文件必須存在&#xff0c;不存在則拋出異常】w只寫模式【不可讀&#xff1b;不存在則創建&#xff1b;存在則清空內容】a之追加寫模式【不可讀&#xff1b;不…

python3 將unicode轉中文

decrypted_str.encode(utf-8).decode(unicode_escape)

HTTP菜鳥教程速查手冊

HTTP協議&#xff08;HyperText Transfer Protocol&#xff0c;超文本傳輸協議&#xff09;是因特網上應用最為廣泛的一種網絡傳輸協議&#xff0c;所有的WWW文件都必須遵守這個標準。 HTTP是一個基于TCP/IP通信協議來傳遞數據&#xff08;HTML 文件, 圖片文件, 查詢結果等&am…

mysql學習筆記01-創建數據庫

創建數據庫&#xff1a; 校驗規則&#xff1a;是指表的排序規則和查詢時候的規則 utf8_general_ci 支持中文&#xff0c; 且不區分大小寫 utf8_bin 支持中文&#xff0c; 區分大小寫 比如&#xff1a; create database db3 character set utf8 collate utf8_general_ci; &…

python的Web編程

首先看一下效果 完整代碼 import socket from multiprocessing import ProcessHTML_ROOT_DIR ""def handle_client(client_socket):request_data client_socket.recv(1024)print("request data:", request_data)response_start_line "HTTP/1.0 20…

mysql 學習筆記 02創建表

表結構的創建 比如&#xff1a; create table userinfo (id int unsigned comment id號name varchar(60) comment 用戶名password char(32),birthday date ) character set utf8 engine MyISAM;comment 表示注釋的意思 不同的存儲引擎&#xff0c;創建的表的文件不一樣

mysql 學習筆記03 常用數據類型

數值類型&#xff1a; a. 整數類型&#xff1a; 注意事項&#xff1a; 舉例&#xff1a;某個整型字段 &#xff0c;不為空&#xff0c;且有默認值 create table test (age int unisigned not null default 1);zerofill的使用 b. bit類型的使用 c.小數類型 小數類型占用…

VMware的虛擬機連不上網

1.如果你發現在VMware下運行的虛擬機無法連接網絡&#xff0c;那下面的方法也許可以幫 到你。&#xff08;前提是你的物理網絡是通的&#xff09; 第一步&#xff1a;在VMware界面下 單擊“編輯“→”虛擬網絡編輯器” 第二步&#xff1a;單擊”更改設置” 獲取權限&#xff…

python三國演義人物出場統計

完整代碼 開源代碼 統計三國演義人物高頻次數 #!/usr/bin/env python # codingutf-8 #e10.4CalThreeKingdoms.py import jieba excludes {"來到","人馬","領兵","將軍","卻說","荊州","二人","…

mysql 學習筆記03修改表以及其他操作

首先創建一張表 在現有表的結構上增加字段 alter table users add image varchar(100) not null defalut comment 圖片路徑;修改某個字段的長度 alter table users modify job vachar(60) not null comment 工作;刪除某個字段 刪除sex這個字段 alter table users drop se…

統計哈姆雷特文本中高頻詞的個數

統計哈姆雷特文本中高頻詞的個數 三國演義人物出場統計 開源代碼 講解視頻 kouubuntu:~/python$ cat ClaHamlet.py #!/usr/bin/env python # codingutf-8#e10.1CalHamlet.py def getText():txt open("hamlet.txt", "r").read()txt txt.lower()for ch…

mysql 學習筆記04 insert與update語句

1.插入數據 注意事項&#xff1a; 字符和日期類型&#xff0c; 要用 單引號 括起來 insert into (), (), () 例如&#xff1a; insert into goods values(1, abc, 2.2), (2, def, 3.3);這種形式添加多條記錄 insert 語句&#xff0c;如果沒有指定字段名&#xff0c;則values …

PyCharm怎么關閉端口,解決端口占用問題

在進行web開發遇到這個問題&#xff01;

mysql 筆記05 select語句以及條件語句的使用

select語句 過濾重復語句&#xff08;distinct&#xff09; 舉例&#xff1a; 查詢學生的總分 select name, math English China as 總分 from students;在姓趙的學生總分基礎上&#xff0c; 增加60%&#xff0c; select name, round((math English China) * 1.6, 2) as …

python3 與 Django 連接數據庫:Error loading MySQLdb module: No module named 'MySQLdb'

解決方法&#xff1a;在 init.py 文件中添加以下代碼即可。 import pymysql pymysql.install_as_MySQLdb()

mysql 學習筆記05 統計函數的相關使用

合計函數count&#xff0c; 統計多少條記錄 統計共有多少學生 select count(*) from students;查詢數學成績大于等于90的學生數量 select count(*) from students where math > 90;查詢總分超過235分的學生的數量 select count(*) from students where (English math Ch…

Unknown column '' in 'field list'

Unknown column ‘’ in ‘field list’ 解決辦法 正確寫法&#xff1a;cursor.execute("update book set name%s where id%d" % (name, int(id))) 錯誤寫法&#xff1a;cursor.execute("update book set name%s where id%d" % (name, int(id)))你要獲取字…

mysql學習筆記06分組語句的使用

group by 子句 對列進行分組 有兩張表&#xff1a; 一張為部門表&#xff0c; 一張為員工表統計 每個部門的平均工資&#xff0c;與最高工資 select avg(salary), max(salary) from emp group by deptno;統計 每個部門的每個崗位的 平均工資與最低工資&#xff08;注意這里的…

Django學習筆記《一》初始化pycharm和mysql數據庫及相關環境

真的不太好學啊&#xff01;記錄一下筆記&#xff0c;要不有的東西老要查&#xff01; CSRF驗證 防止偽造數據添加數據庫&#xff0c;關閉方式 MIDDLEWARE [django.middleware.security.SecurityMiddleware,django.contrib.sessions.middleware.SessionMiddleware,django.m…