#include #include #include #include #include #include #define MAX 50 void* aworking(void* arg); void* bworking(void* arg); pthread_mutex_t mutex; int main(int argc, char const *argv[]) { int num = 0; pthread_mutex_init(&mutex, NULL); pthread_t apid; pthread_create(&apid, NULL, aworking, &num); pthread_t bpid; pthread_create(&bpid, NULL, bworking, &num); pthread_join(apid, NULL); pthread_join(bpid, NULL); pthread_mutex_destroy(&mutex); return 0; } void* aworking(void* arg){ printf("aworking thread id: %lu\n", pthread_self()); int* num = (int*)arg; for (size_t i = 0; i < MAX; i++) { pthread_mutex_lock(&mutex); int cur = *num; cur++; // 在将寄存器中的数据赋值到内存中的时候,演示10微秒,演示在b线程中每5微秒操作数据时,中间插入a线程操作的数据 usleep(10); *num = cur; printf("Thread A, num=%d\n", *num); pthread_mutex_unlock(&mutex); } return NULL; } void* bworking(void* arg){ printf("bworking thread id: %lu\n", pthread_self()); int* num = (int*)arg; for (size_t i = 0; i < MAX; i++) { pthread_mutex_lock(&mutex); int cur = *num; cur++; *num = cur; printf("Thread B, num=%d\n", *num); pthread_mutex_unlock(&mutex); usleep(5); } return NULL; }