
作业社区
探索学习新天地,共享知识资源!
橙子上的萤火 的学生作业:
a = 0x58 ===> 0101 1000 b = 0xd7 ===> 1101 0111 c = a & b ===> 0101 1000 & 1101 0111 = 0101 0000 = 0x50 c = 0x50; c = a | b ===> 0101 1000 | 1101 0111 = 1101 1111 = 0xdf c = (a & ~b) ^ 0xf1 1> b = 1101 0111 -> 取反 0010 1000 2> a & ~b => 0101 1000 & 0010 1000 ⇒ 0000 1000 => 0x08 3 > 0xf1 ⇒ 0000 1000 ^ 1111 0001 => 1111 1001 = 0xf9 c = (a & ~b)^0xf1 = 0xf9 验证截图:【图片】 【图片】





沫颖 的学生作业:
未加锁 /** * 1-2 线程互斥锁-课后任务 示例 创建两个线程,分别对全局变量进行 +1 操作,分别对比使用互斥锁和没有使用互斥锁 */ #include #include #include #include // 静态全局变量 static int global = 0; // 子线程执行函数 void *pthread_work(void *arg) { // 循环次数 int loops = *(int *)arg; // 中间变量 int tmp; for (int i = 0; i < loops; i++) { tmp = global; tmp++; global = tmp; } pthread_exit(NULL); } int main(int argc, char *args[]) { int err; int loops = 0; // 线程数 pthread_t tid[2] = {0}; // 终端参数 if (2 != argc) { fprintf(stderr, "please input %s argument:loops\n", args[0]); exit(EXIT_FAILURE); } // 类型转换 loops = atoi(args[1]); // 创建线程 for (int i = 0; i < 2; i++) { err = pthread_create(&tid[i], NULL, pthread_work, (void *)&loops); if (0 != err) { fprintf(stderr, "[ERROR] pthread_create():\n"); exit(EXIT_FAILURE); } } // 等待子线程退出 for (int i = 0; i < 2; i++) { pthread_join(tid[i], NULL); } printf("global is %d\n", global); return 0; } 执行结果 【图片】 加锁-静态初始化 /** * 1-2 线程互斥锁-课后任务 示例 创建两个线程,分别对全局变量进行 +1 操作,分别对比使用互斥锁和没有使用互斥锁 */ #include #include #include #include // 静态全局变量 static int global = 0; // 线程互斥锁 static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // 子线程执行函数 void *pthread_work(void *arg) { // 循环次数 int loops = *(int *)arg; // 中间变量 int tmp; for (int i = 0; i < loops; i++) { // 加锁 pthread_mutex_lock(&mutex); tmp = global; tmp++; global = tmp; // 释放锁 pthread_mutex_unlock(&mutex); } pthread_exit(NULL); } int main(int argc, char *args[]) { int err; int loops = 0; // 线程数 pthread_t tid[2] = {0}; // 终端参数 if (2 != argc) { fprintf(stderr, "please input %s argument:loops\n", args[0]); exit(EXIT_FAILURE); } // 类型转换 loops = atoi(args[1]); // 创建线程 for (int i = 0; i < 2; i++) { err = pthread_create(&tid[i], NULL, pthread_work, (void *)&loops); if (0 != err) { fprintf(stderr, "[ERROR] pthread_create():\n"); exit(EXIT_FAILURE); } } // 等待子线程退出 for (int i = 0; i < 2; i++) { pthread_join(tid[i], NULL); } printf("global is %d\n", global); return 0; } 执行效果【图片】 加锁-动态初始化 /** * 1-2 线程互斥锁-课后任务 示例 创建两个线程,分别对全局变量进行 +1 操作,分别对比使用互斥锁和没有使用互斥锁 */ #include #include #include #include // 静态全局变量 static int global = 0; // 线程互斥锁 static pthread_mutex_t mutex; // 子线程执行函数 void *pthread_work(void *arg) { // 循环次数 int loops = *(int *)arg; // 中间变量 int tmp; for (int i = 0; i < loops; i++) { // 加锁 pthread_mutex_lock(&mutex); tmp = global; tmp++; global = tmp; // 释放锁 pthread_mutex_unlock(&mutex); } pthread_exit(NULL); } int main(int argc, char *args[]) { int err; int loops = 0; // 线程数 pthread_t tid[2] = {0}; // 终端参数 if (2 != argc) { fprintf(stderr, "please input %s argument:loops\n", args[0]); exit(EXIT_FAILURE); } // 类型转换 loops = atoi(args[1]); // 创建线程 for (int i = 0; i < 2; i++) { err = pthread_create(&tid[i], NULL, pthread_work, (void *)&loops); if (0 != err) { fprintf(stderr, "[ERROR] pthread_create():\n"); exit(EXIT_FAILURE); } } // 动态初始化 pthread_mutex_init(&mutex, NULL); // 等待子线程退出 for (int i = 0; i < 2; i++) { pthread_join(tid[i], NULL); } printf("global is %d\n", global); // 销毁锁 pthread_mutex_destroy(&mutex); return 0; } 执行效果【图片】





阿大月 的学生作业:
#include #include #include #include void* do_thread1(void* arg) { printf("this is the thread1\n"); return 0; } void* do_thread2(void* arg) { printf("this is the thread2\n"); return 0; } int main() { pthread_t cthread1, cthread2; int err; if ((err = pthread_create(&cthread1, NULL, do_thread1, NULL)) != 0){ fprintf(stderr, "ERROR create thread is failed: %s\n", strerror(err)); exit(EXIT_FAILURE); } if ((err = pthread_create(&cthread2, NULL, do_thread2, NULL)) != 0){ fprintf(stderr, "ERROR create thread is failed: %s\n", strerror(err)); exit(EXIT_FAILURE); } pthread_detach(cthread1); pthread_join(cthread2, NULL); return 0; }





阿大月 的学生作业:
#include #include #include #include void* do_thread1(void* arg) { printf("this is child thread1\n"); return 0; } void* do_thread2(void* arg) { printf("this is child thread2\n"); return 0; } int main() { pthread_t cthread1, cthread2; int err; if ((err = pthread_create(&cthread1, NULL, do_thread1, NULL)) != 0){ fprintf(stderr, "ERROR create thread is failed: %s\n", strerror(err)); exit(EXIT_FAILURE); } if ((err = pthread_create(&cthread2, NULL, do_thread2, NULL)) != 0){ fprintf(stderr, "ERROR create thread is failed: %s\n", strerror(err)); exit(EXIT_FAILURE); } printf("cthread1 = %lu, cthread2 = %lu\n", cthread1, cthread2); return 0; }




