1. Trang chủ
  2. » Công Nghệ Thông Tin

chap01 c linux p4 thread vanlangembeddedsystems

15 111 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 15
Dung lượng 286,48 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nội dungGiới thiệu lập trình nhúng và môi trường Linux T1 ‰ Xuất nhập và truyền nhận sử dụng IPC T3-4 ‰ Thread ‰ Xuất nhập trực tiếp thiết bị qua Port T5... Khái niệm„ Các thread trong

Trang 1

LẬP TRÌNH

Email: Tu.NN79@gmail.com

Chương 01:Lập trình C/C++ trên Linux

(P4: Thread)

Trang 2

Nội dung

Giới thiệu lập trình nhúng và môi trường Linux

(T1)

‰ Xuất nhập và truyền nhận sử dụng IPC

(T3-4)

‰ Thread

‰ Xuất nhập trực tiếp thiết bị qua Port

(T5)

Trang 3

Khái niệm

Trang 4

Khái niệm

„ Các thread trong cùng một process chia sẻ

cùng

‰ mã (text section)

‰ dữ liệu (data section)

‰ Phần mô tả tập tin

„ Các vùng riêng của mỗi thread

‰ Thread ID

‰ Stack

‰ Thanh ghi

Trang 5

Chuẩn về Thread

„ POSIX (Portable Operating System Interface)

thread hay còn gọi là IEEE 1003.1, 1003.1c

‰ phổ biến trong các hệ thống *NIX hiện tại

‰ đặc tả các giao diện lập trình API và thư viện

user-level thread

„ Sun Thread

Trang 6

POSIX Threads

„ Khởi tạo thread mới

‰ #include <pthread.h>

‰ int pthread_create (

„ pthread_t * thread,

„ pthread_attr_t * attr,

„ void * (*start_routine)(void *),

„ Kết quả trả về của hàm

‰ 0:

„ Tạo thread mới thành công

„ tham số thread chứa thread ID

‰ #0: Thất bại (mã lỗi trả về trong errno)

Trang 7

POSIX Threads

„ Các tham số

‰ thread :

„ biến con trỏ kiểu pthread_t

„ chứa ID của thread mới

‰ attr :

„ chứa các thiết lập thuộc tính cho thread,

„ nếu tham số attr = NULL thì thiết lập theo giá trị mặc định.

‰ start_routine :

Tham chiếu đến một hàm của user định nghĩa.

Trang 8

POSIX Threads

„ Thread kết thúc thực thi khi

‰ hàm start_routine kết thúc

‰ Có lời gọi hàm pthread_exit() tường minh.

‰ Thread bị ngắt bởi lời gọi hàm pthread_cancel ()

‰ process chính kết thúc

‰ một trong các thread gọi hàm hệ thống exec ()

„ Lời gọi hàm kết thúc thread tường minh

‰ void pthread_exit (void * retval);

Trang 9

File thr1.c

#include <pthread.h>

#include <stdio.h>

void* func(void* arg) {

int i;

for (i = 0; i < 2; i++) {

printf ("This is thread %d\n", *((int*)arg));

sleep (1);

}

}

int main (int argc, char **argv) {

int i;

pthread_t tid[5];

Trang 10

Biên dịch và thực thi

$gcc thr1.c -o thr1 – lpthread

$./thr1

(chỉ định liên kết với thư viện POSIX pthread)

This is thread 1026

This is thread 2051

This is thread 3076

This is thread 4101

This is thread 5126

This is thread 1026

This is thread 2051

This is thread 3076

This is thread 4101

This is thread 5126

Trang 11

Chờ Threads

„ PTHREAD_JOIN

‰ #include <pthread.h>

‰ int pthread_join (

„ pthread_t th,

„ void **thread_return);

„ Hàm pthread_join ()

‰ khiến cho thread gọi hàm phải tạm ngưng thực thi

‰ chờ/đợi đến khi thread có chỉ số thread ID kết thúc

‰ Tham số thread_return chứa kết quả trả về(chính là giá trị

Trang 12

File thr2.c

#include <pthread.h>

#include <stdio.h>

void* func(void* arg) {

for (int i = 0; i < 2; i++) {

printf ("This is thread %d\n", (int*)arg));

sleep (1);

} }

int main (int argc, char **argv) {

int i;

pthread_t tid[3];

for (i = 0; i < 3; i++){

pthread_create (&tid[i], NULL, func, (void*)&tid[i]);

} return 0;

}

Trang 13

struct char_print_parms {

char character;

int count;

};

void* char_print (void* args) {

struct char_print_parms* p = (struct char_print_parms*) args; for (int i = 0; i < p->count; ++i)

printf ("%c", p->character);

return NULL;

}

int main () {

pthread_t tid;

struct char_print_parms th_args;

th_args.character = 'X';

Trang 14

Bài tập Threads

Trang 15

Q/A

Ngày đăng: 19/06/2018, 14:27

TỪ KHÓA LIÊN QUAN