วันนี้ทำงาน แล้วติดปัญหา ผมมี function นึงซึ่งใช้ในการจัดการ Linked-List
ซึ่ง linked-list ตัวนี้ถูกประกาศเป็น global
และโปรแกรมที่ผมทำนั้น การทำงานถูกแยกเป็น thread
ดังนั้นโอกาสที่ จะมีการ access Linked-list ตัวนี้ก็มีสูง
ลูกพี่ผมก็แนะนำให้ใช้ semaphore lock โดยขณะที่ มี เธรดไหนทำอยู่ก็ให้ lock ไว้ก่อน
โดย syntax ที่ใช้มีดังนี้
#include <semaphore.h> <—- Include
sem_t mutex; <— mutext variable
sem_wait(&mutex); <—- Lock
sem_post(&mutex); <—- Unlock
แต่ก่อนจะใช้ ต้อง Init ก่อนนะครับ
sem_init(&mutex, 0, 1);
เช่น
int editData()
{
sem_wait(&mutex);
A++;
sem_post(&mutex);
return A;
}
ข้อสำคัญคือ ต้อง Unlock ก่อนที่จะ Return นะครับ
ปล. ตอน compile ต้อง -lposix4 ด้วยนะครับ ^^
วันนี้ผมจะมาเขียนเรื่องวิธีง่าย ๆ ที่ผมใช้ส่ง Integer ไปทาง TCP
ซึ่งการส่งข้อมูลจะต้องถูกตัดออกเป็นไบต์ ๆ ในการส่ง
ซึ่งตัวแปล Integer (ของ CPU 32 bit) จะมีขนาด 4 ไบต์ (8 x 4 = 32)
ซึ่งวิธีการที่ผมใช้การ Shift Bit เข้ามาช่วง ซึ่งทำให้การเขียนโปแรกมนั้นง่าย CPU ทำงานน้อย (น้อยกว่าวิธีการ ลบ และ mod)
สมุติเรามีข้อมูลแบบนี้
(3)00110011 (2)00111100 (1)10000001 (0)11110000 (ค่าเท่าไหร่ไม่ต้องไปสนใจ โดยเราจะใช้ชื่อแทนว่า Data)
เวลาเราส่งก็ต้องแยกออกเป็นไบต์ ๆ ได้แบบนี้
(0)11110000
(1)10000001
(2)00111100
(3)00110011
โดยเรียงจากไบต์ต่ำมาหาไบต์สูง
ซึ่งวิธีการได้ไบต์ต่างๆ มาดังนี้
(0)11110000 = (Data & 00000000 00000000 00000000 11111111)
(1)10000001 = (Data & 00000000 00000000 11111111 00000000) >> [...]
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
| « Jun | ||||||
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | ||