diff --git a/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_atfork_test_001.cpp b/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_atfork_test_001.cpp index 41037f2..a896037 100644 --- a/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_atfork_test_001.cpp +++ b/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_atfork_test_001.cpp @@ -29,66 +29,66 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "it_pthread_test.h" -// 全局变量 -static volatile int g_count = 0; // 计数器,控制线程的执行 -static pthread_mutex_t g_lock = PTHREAD_MUTEX_INITIALIZER; // 互斥锁,用于同步 -static int g_testAtforkCount = 0; // 测试计数器,用于检查不同阶段 -static int g_testAtforkPrepare = 0; // 用于检查fork前的准备阶段 -static int g_testAtforkParent = 0; // 用于标记父进程执行的步骤 -static int g_testAtforkChild = 0; // 用于标记子进程执行的步骤 -static const int SLEEP_TIME = 2; // 睡眠时间,单位秒 - -// 准备函数,fork之前执行 +// ȫֱ +static volatile int g_count = 0; // ̵ִ߳ +static pthread_mutex_t g_lock = PTHREAD_MUTEX_INITIALIZER; // ͬ +static int g_testAtforkCount = 0; // Լڼ鲻ͬ׶ +static int g_testAtforkPrepare = 0; // ڼforkǰ׼׶ +static int g_testAtforkParent = 0; // ڱǸִеIJ +static int g_testAtforkChild = 0; // ڱӽִеIJ +static const int SLEEP_TIME = 2; // ˯ʱ䣬λ + +// ׼fork֮ǰִ static void Prepare() { int err; - ICUNIT_ASSERT_EQUAL_VOID(g_testAtforkCount, 1, g_testAtforkCount); // 确保g_testAtforkCount为1 - err = pthread_mutex_lock(&g_lock); // 加锁 - ICUNIT_ASSERT_EQUAL_VOID(err, 0, err); // 确保加锁成功 - g_testAtforkPrepare++; // 标记准备阶段已执行 + ICUNIT_ASSERT_EQUAL_VOID(g_testAtforkCount, 1, g_testAtforkCount); // ȷg_testAtforkCountΪ1 + err = pthread_mutex_lock(&g_lock); // + ICUNIT_ASSERT_EQUAL_VOID(err, 0, err); // ȷɹ + g_testAtforkPrepare++; // ׼׶ִ } -// 父进程执行的函数 +// ִеĺ static void Parent() { int err; - ICUNIT_ASSERT_EQUAL_VOID(g_testAtforkCount, 1, g_testAtforkCount); // 确保g_testAtforkCount为1 - err = pthread_mutex_unlock(&g_lock); // 解锁 - ICUNIT_ASSERT_EQUAL_VOID(err, 0, err); // 确保解锁成功 - g_testAtforkParent++; // 标记父进程阶段已执行 + ICUNIT_ASSERT_EQUAL_VOID(g_testAtforkCount, 1, g_testAtforkCount); // ȷg_testAtforkCountΪ1 + err = pthread_mutex_unlock(&g_lock); // + ICUNIT_ASSERT_EQUAL_VOID(err, 0, err); // ȷɹ + g_testAtforkParent++; // Ǹ̽׶ִ } -// 子进程执行的函数 +// ӽִеĺ static void child() { int err; - ICUNIT_ASSERT_EQUAL_VOID(g_testAtforkCount, 1, g_testAtforkCount); // 确保g_testAtforkCount为1 - err = pthread_mutex_unlock(&g_lock); // 解锁 - ICUNIT_ASSERT_EQUAL_VOID(err, 0, err); // 确保解锁成功 - g_testAtforkChild++; // 标记子进程阶段已执行 + ICUNIT_ASSERT_EQUAL_VOID(g_testAtforkCount, 1, g_testAtforkCount); // ȷg_testAtforkCountΪ1 + err = pthread_mutex_unlock(&g_lock); // + ICUNIT_ASSERT_EQUAL_VOID(err, 0, err); // ȷɹ + g_testAtforkChild++; // ӽ̽׶ִ } -// 线程执行的函数 +// ִ߳еĺ static void *ThreadProc(void *arg) { int err; - // 当g_count小于5时,线程继续执行 - while (g_count < 5) { // 5, 等待直到g_count == 5 - err = pthread_mutex_lock(&g_lock); // 加锁 - ICUNIT_GOTO_EQUAL(err, 0, err, EXIT); // 确保加锁成功 - g_count++; // 增加计数 - SLEEP_AND_YIELD(SLEEP_TIME); // 睡眠并让出CPU - err = pthread_mutex_unlock(&g_lock); // 解锁 - ICUNIT_GOTO_EQUAL(err, 0, err, EXIT); // 确保解锁成功 - SLEEP_AND_YIELD(SLEEP_TIME); // 睡眠并让出CPU + // g_countС5ʱִ̼߳ + while (g_count < 5) { // 5, ȴֱg_count == 5 + err = pthread_mutex_lock(&g_lock); // + ICUNIT_GOTO_EQUAL(err, 0, err, EXIT); // ȷɹ + g_count++; // Ӽ + SLEEP_AND_YIELD(SLEEP_TIME); // ˯߲óCPU + err = pthread_mutex_unlock(&g_lock); // + ICUNIT_GOTO_EQUAL(err, 0, err, EXIT); // ȷɹ + SLEEP_AND_YIELD(SLEEP_TIME); // ˯߲óCPU } EXIT: return NULL; } -// 测试pthread_atfork的函数 +// pthread_atforkĺ static void *PthreadAtforkTest(void *arg) { int err; @@ -96,63 +96,63 @@ static void *PthreadAtforkTest(void *arg) pthread_t tid; int status = 0; - // 初始化全局变量 + // ʼȫֱ g_count = 0; g_testAtforkCount = 0; g_testAtforkPrepare = 0; g_testAtforkParent = 0; g_testAtforkChild = 0; - // 创建新线程 + // ߳ err = pthread_create(&tid, NULL, ThreadProc, NULL); - ICUNIT_GOTO_EQUAL(err, 0, err, EXIT); // 确保线程创建成功 - err = pthread_atfork(Prepare, Parent, child); // 注册fork前后要执行的函数 - ICUNIT_GOTO_EQUAL(err, 0, err, EXIT); // 确保注册成功 + ICUNIT_GOTO_EQUAL(err, 0, err, EXIT); // ȷ̴߳ɹ + err = pthread_atfork(Prepare, Parent, child); // עforkǰҪִеĺ + ICUNIT_GOTO_EQUAL(err, 0, err, EXIT); // ȷעɹ - g_testAtforkCount++; // 标记已执行测试的计数 + g_testAtforkCount++; // ִвԵļ - SLEEP_AND_YIELD(SLEEP_TIME); // 睡眠并让出CPU + SLEEP_AND_YIELD(SLEEP_TIME); // ˯߲óCPU - // 创建子进程 + // ӽ pid = fork(); - ICUNIT_GOTO_WITHIN_EQUAL(pid, 0, 100000, pid, EXIT); // 确保pid合理,子进程的pid不会超过100000 - ICUNIT_GOTO_EQUAL(g_testAtforkPrepare, 1, g_testAtforkPrepare, EXIT); // 确保准备阶段已执行 + ICUNIT_GOTO_WITHIN_EQUAL(pid, 0, 100000, pid, EXIT); // ȷpidӽ̵pidᳬ100000 + ICUNIT_GOTO_EQUAL(g_testAtforkPrepare, 1, g_testAtforkPrepare, EXIT); // ȷ׼׶ִ - // 子进程执行的代码 + // ӽִеĴ if (pid == 0) { - ICUNIT_GOTO_EQUAL(g_testAtforkChild, 1, g_testAtforkChild, EXIT); // 确保子进程阶段已执行 - while (g_count < 5) { // 等待直到g_count == 5 - err = pthread_mutex_lock(&g_lock); // 加锁 - ICUNIT_GOTO_EQUAL(err, 0, err, EXIT); // 确保加锁成功 - g_count++; // 增加计数 - SLEEP_AND_YIELD(SLEEP_TIME); // 睡眠并让出CPU - err = pthread_mutex_unlock(&g_lock); // 解锁 - ICUNIT_GOTO_EQUAL(err, 0, err, EXIT); // 确保解锁成功 - SLEEP_AND_YIELD(SLEEP_TIME); // 睡眠并让出CPU + ICUNIT_GOTO_EQUAL(g_testAtforkChild, 1, g_testAtforkChild, EXIT); // ȷӽ̽׶ִ + while (g_count < 5) { // ȴֱg_count == 5 + err = pthread_mutex_lock(&g_lock); // + ICUNIT_GOTO_EQUAL(err, 0, err, EXIT); // ȷɹ + g_count++; // Ӽ + SLEEP_AND_YIELD(SLEEP_TIME); // ˯߲óCPU + err = pthread_mutex_unlock(&g_lock); // + ICUNIT_GOTO_EQUAL(err, 0, err, EXIT); // ȷɹ + SLEEP_AND_YIELD(SLEEP_TIME); // ˯߲óCPU } - exit(15); // 退出并设置状态为15 + exit(15); // ˳״̬Ϊ15 } - // 父进程的验证 + // ̵֤ ICUNIT_GOTO_EQUAL(g_testAtforkParent, 1, g_testAtforkParent, EXIT_WAIT); - err = pthread_join(tid, NULL); // 等待线程结束 + err = pthread_join(tid, NULL); // ȴ߳̽ ICUNIT_GOTO_EQUAL(err, 0, err, EXIT_WAIT); - // 父进程等待子进程结束并验证退出状态 + // ̵ȴӽ֤̽˳״̬ err = waitpid(pid, &status, 0); status = WEXITSTATUS(status); - ICUNIT_GOTO_EQUAL(err, pid, err, EXIT); // 确保waitpid成功 - ICUNIT_GOTO_EQUAL(status, 15, status, EXIT); // 确保子进程的退出状态为15 + ICUNIT_GOTO_EQUAL(err, pid, err, EXIT); // ȷwaitpidɹ + ICUNIT_GOTO_EQUAL(status, 15, status, EXIT); // ȷӽ̵˳״̬Ϊ15 EXIT: return NULL; EXIT_WAIT: - (void)waitpid(pid, &status, 0); // 等待子进程结束 + (void)waitpid(pid, &status, 0); // ȴӽ̽ return NULL; } -// 测试主程序 +// static int Testcase() { int ret; @@ -161,28 +161,28 @@ static int Testcase() pthread_attr_t a = { 0 }; struct sched_param param = { 0 }; - // 获取当前线程的调度参数 + // ȡǰ̵߳ĵȲ ret = pthread_getschedparam(pthread_self(), &curThreadPolicy, ¶m); ICUNIT_ASSERT_EQUAL(ret, 0, -ret); curThreadPri = param.sched_priority; - // 设置新的线程属性并创建新线程 + // µ߳Բ߳ ret = pthread_attr_init(&a); pthread_attr_setinheritsched(&a, PTHREAD_EXPLICIT_SCHED); - param.sched_priority = curThreadPri + 2; // 提高线程优先级 + param.sched_priority = curThreadPri + 2; // ߳ȼ pthread_attr_setschedparam(&a, ¶m); - ret = pthread_create(&newPthread, &a, PthreadAtforkTest, 0); // 创建新线程 + ret = pthread_create(&newPthread, &a, PthreadAtforkTest, 0); // ߳ ICUNIT_ASSERT_EQUAL(ret, 0, ret); - // 等待新线程结束 + // ȴ߳̽ ret = pthread_join(newPthread, NULL); ICUNIT_ASSERT_EQUAL(ret, 0, ret); return 0; } -// 测试用例的入口函数 +// ں void ItTestPthreadAtfork001(void) { TEST_ADD_CASE("IT_PTHREAD_ATFORK_001", Testcase, TEST_POSIX, TEST_MEM, TEST_LEVEL0, TEST_FUNCTION); diff --git a/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_atfork_test_002.cpp b/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_atfork_test_002.cpp index 0f61ac4..24154ea 100644 --- a/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_atfork_test_002.cpp +++ b/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_atfork_test_002.cpp @@ -38,13 +38,13 @@ extern int nanosleep(const struct timespec *req, struct timespec *rem); -// 全局变量 +// ȫֱ static pthread_mutex_t g_mux = PTHREAD_MUTEX_INITIALIZER; static volatile int g_testAtforkCount = 0; static int g_testAtforkPrepare = 0; static int g_testAtforkParent = 0; -// 函数原型 +// ԭ static void *Doit(void *arg); static void *Doit1(void *arg); static void Prepare(void); @@ -53,69 +53,69 @@ static void *PthreadAtforkTest(void *arg); static int Testcase(void); void ItTestPthreadAtfork002(void); -// Doit 函数(线程 1) +// Doit ߳ 1 static void *Doit(void *arg) { int err; - struct timespec ts = { 2, 0 }; // 睡眠 2 秒 + struct timespec ts = { 2, 0 }; // ˯ 2 - // 确保全局变量 g_testAtforkCount 为 1 + // ȷȫֱ g_testAtforkCount Ϊ 1 if (g_testAtforkCount != 1) { return NULL; } - // 锁住互斥锁 + // ס err = pthread_mutex_lock(&g_mux); if (err != 0) return NULL; - (void)nanosleep(&ts, NULL); // 睡眠 2 秒 - err = pthread_mutex_unlock(&g_mux); // 解锁互斥锁 + (void)nanosleep(&ts, NULL); // ˯ 2 + err = pthread_mutex_unlock(&g_mux); // if (err != 0) return NULL; return NULL; } -// Doit1 函数(线程 2 - 子进程) +// Doit1 ߳ 2 - ӽ̣ static void *Doit1(void *arg) { int err; - struct timespec ts = { 2, 0 }; // 睡眠 2 秒 + struct timespec ts = { 2, 0 }; // ˯ 2 - // 确保全局变量 g_testAtforkCount 为 1 + // ȷȫֱ g_testAtforkCount Ϊ 1 if (g_testAtforkCount != 1) { return NULL; } - // 锁住互斥锁 + // ס err = pthread_mutex_lock(&g_mux); if (err != 0) return NULL; - (void)nanosleep(&ts, NULL); // 睡眠 2 秒 - err = pthread_mutex_unlock(&g_mux); // 解锁互斥锁 + (void)nanosleep(&ts, NULL); // ˯ 2 + err = pthread_mutex_unlock(&g_mux); // if (err != 0) return NULL; return NULL; } -// Prepare 函数(在 fork 前调用) +// Prepare fork ǰã static void Prepare(void) { int err; - err = pthread_mutex_unlock(&g_mux); // 在 fork 前解锁互斥锁 + err = pthread_mutex_unlock(&g_mux); // fork ǰ if (err != 0) return; - g_testAtforkPrepare++; // 增加 prepare 计数 + g_testAtforkPrepare++; // prepare } -// Parent 函数(在 fork 后父进程中调用) +// Parent fork 󸸽еã static void Parent(void) { - int err = pthread_mutex_lock(&g_mux); // 在父进程中锁住互斥锁 + int err = pthread_mutex_lock(&g_mux); // ڸס if (err != 0) return; - g_testAtforkParent++; // 增加父进程计数 + g_testAtforkParent++; // Ӹ̼ } -// PthreadAtforkTest 函数(主测试函数) +// PthreadAtforkTest Ժ static void *PthreadAtforkTest(void *arg) { int err, ret; @@ -128,45 +128,45 @@ static void *PthreadAtforkTest(void *arg) g_testAtforkPrepare = 0; g_testAtforkParent = 0; - // 注册 pthread_atfork 的回调函数 + // ע pthread_atfork Ļص err = pthread_atfork(Prepare, Parent, NULL); if (err != 0) return NULL; - g_testAtforkCount++; // 增加计数用于测试 + g_testAtforkCount++; // Ӽڲ - // 创建一个线程执行 Doit 函数 + // һִ߳ Doit err = pthread_create(&tid, NULL, Doit, NULL); if (err != 0) return NULL; - nanosleep(&ts, NULL); // 睡眠 1 秒 - pid = fork(); // 创建子进程 + nanosleep(&ts, NULL); // ˯ 1 + pid = fork(); // ӽ - // 检查 Prepare 函数是否被调用 + // Prepare Ƿ񱻵 if (g_testAtforkPrepare != 1) { return NULL; } if (pid == 0) { - Doit1(NULL); // 在子进程中执行 Doit1 函数 - exit(10); // 子进程退出,返回状态 10 + Doit1(NULL); // ӽִ Doit1 + exit(10); // ӽ˳״̬ 10 } if (pid <= 0) { return NULL; } - // 检查 Parent 函数是否被调用 + // Parent Ƿ񱻵 if (g_testAtforkParent != 1) { return NULL; } - // 等待线程执行完毕 + // ȴִ߳ err = pthread_join(tid, NULL); if (err != 0) return NULL; - // 等待子进程结束 + // ȴӽ̽ err = waitpid(pid, &status, 0); - status = WEXITSTATUS(status); // 获取子进程退出状态 + status = WEXITSTATUS(status); // ȡӽ˳״̬ if (err != pid || status != 10) { return NULL; } @@ -174,7 +174,7 @@ static void *PthreadAtforkTest(void *arg) return NULL; } -// Testcase 函数(初始化线程调度参数并执行测试) +// Testcase ʼ̵߳Ȳִвԣ static int Testcase(void) { int ret; @@ -183,33 +183,33 @@ static int Testcase(void) pthread_attr_t a = { 0 }; struct sched_param param = { 0 }; - // 获取当前线程的调度参数 + // ȡǰ̵߳ĵȲ ret = pthread_getschedparam(pthread_self(), &curThreadPolicy, ¶m); if (ret != 0) return ret; curThreadPri = param.sched_priority; - // 初始化线程属性 + // ʼ߳ ret = pthread_attr_init(&a); if (ret != 0) return ret; pthread_attr_setinheritsched(&a, PTHREAD_EXPLICIT_SCHED); - param.sched_priority = curThreadPri + 2; // 设置线程优先级为当前优先级 + 2 + param.sched_priority = curThreadPri + 2; // ߳ȼΪǰȼ + 2 pthread_attr_setschedparam(&a, ¶m); - // 创建新线程执行 PthreadAtforkTest 函数 + // ִ߳ PthreadAtforkTest ret = pthread_create(&newPthread, &a, PthreadAtforkTest, 0); if (ret != 0) return ret; - // 等待新线程执行完毕 + // ȴִ߳ ret = pthread_join(newPthread, NULL); if (ret != 0) return ret; return 0; } -// ItTestPthreadAtfork002 函数(测试用例入口) +// ItTestPthreadAtfork002 ڣ void ItTestPthreadAtfork002(void) { TEST_ADD_CASE("IT_PTHREAD_ATFORK_002", Testcase, TEST_POSIX, TEST_MEM, TEST_LEVEL0, TEST_FUNCTION); -} +} \ No newline at end of file diff --git a/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_cond_test_001.cpp b/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_cond_test_001.cpp index ccbb5bb..8c023a7 100644 --- a/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_cond_test_001.cpp +++ b/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_cond_test_001.cpp @@ -29,109 +29,187 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include -#include "ICUnit.h" // 假设你有这个头文件来处理测试相关的宏 +#include +#include +#include +#include +#include +#include + +extern int nanosleep(const struct timespec *req, struct timespec *rem); + +// ȫֱ +static pthread_mutex_t g_mux = PTHREAD_MUTEX_INITIALIZER; +static volatile int g_testAtforkCount = 0; +static int g_testAtforkPrepare = 0; +static int g_testAtforkParent = 0; + +// ԭ +static void *Doit(void *arg); +static void *Doit1(void *arg); +static void Prepare(void); +static void Parent(void); +static void *PthreadAtforkTest(void *arg); +static int Testcase(void); +void ItTestPthreadAtfork002(void); + +// Doit ߳ 1 +static void *Doit(void *arg) +{ + int err; + struct timespec ts = { 2, 0 }; // ˯ 2 + + // ȷȫֱ g_testAtforkCount Ϊ 1 + if (g_testAtforkCount != 1) { + return NULL; + } -static pthread_mutex_t g_pthreadMuxTest1; // 定义互斥锁 -static pthread_cond_t g_pthdCondTest1; // 定义条件变量 + // ס + err = pthread_mutex_lock(&g_mux); + if (err != 0) return NULL; -// 线程1的函数 -static void *PthreadF01(void *t) -{ - int rc; + (void)nanosleep(&ts, NULL); // ˯ 2 + err = pthread_mutex_unlock(&g_mux); // + if (err != 0) return NULL; - // 锁住互斥锁 - rc = pthread_mutex_lock(&g_pthreadMuxTest1); - ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); + return NULL; +} + +// Doit1 ߳ 2 - ӽ̣ +static void *Doit1(void *arg) +{ + int err; + struct timespec ts = { 2, 0 }; // ˯ 2 - g_testCount++; // g_testCount加1 - LosTaskDelay(100); // 延时100ms - ICUNIT_GOTO_EQUAL(g_testCount, 2, g_testCount, EXIT); // 断言g_testCount应为2 - g_testCount++; // g_testCount再加1 + // ȷȫֱ g_testAtforkCount Ϊ 1 + if (g_testAtforkCount != 1) { + return NULL; + } - // 等待条件变量,释放互斥锁 - rc = pthread_cond_wait(&g_pthdCondTest1, &g_pthreadMuxTest1); - ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); + // ס + err = pthread_mutex_lock(&g_mux); + if (err != 0) return NULL; - ICUNIT_GOTO_EQUAL(g_testCount, 5, g_testCount, EXIT); // 断言g_testCount应为5 - rc = pthread_mutex_unlock(&g_pthreadMuxTest1); // 解锁互斥锁 - ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); + (void)nanosleep(&ts, NULL); // ˯ 2 + err = pthread_mutex_unlock(&g_mux); // + if (err != 0) return NULL; -EXIT: return NULL; } -// 线程2的函数 -static void *PthreadF02(void *t) +// Prepare fork ǰã +static void Prepare(void) +{ + int err; + + err = pthread_mutex_unlock(&g_mux); // fork ǰ + if (err != 0) return; + g_testAtforkPrepare++; // prepare +} + +// Parent fork 󸸽еã +static void Parent(void) +{ + int err = pthread_mutex_lock(&g_mux); // ڸס + if (err != 0) return; + g_testAtforkParent++; // Ӹ̼ +} + +// PthreadAtforkTest Ժ +static void *PthreadAtforkTest(void *arg) { - int rc; + int err, ret; + int pid; + int status = 0; + struct timespec ts = { 1, 0 }; + pthread_t tid; - ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT); // 断言g_testCount应为1 - g_testCount++; // g_testCount加1 + g_testAtforkCount = 0; + g_testAtforkPrepare = 0; + g_testAtforkParent = 0; - // 锁住互斥锁 - rc = pthread_mutex_lock(&g_pthreadMuxTest1); - ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); + // ע pthread_atfork Ļص + err = pthread_atfork(Prepare, Parent, NULL); + if (err != 0) return NULL; - ICUNIT_GOTO_EQUAL(g_testCount, 3, g_testCount, EXIT); // 断言g_testCount应为3 - g_testCount++; // g_testCount再加1 + g_testAtforkCount++; // Ӽڲ - // 发送信号,唤醒线程1 - rc = pthread_cond_signal(&g_pthdCondTest1); - ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); + // һִ߳ Doit + err = pthread_create(&tid, NULL, Doit, NULL); + if (err != 0) return NULL; - ICUNIT_GOTO_EQUAL(g_testCount, 4, g_testCount, EXIT); // 断言g_testCount应为4 - g_testCount++; // g_testCount再加1 + nanosleep(&ts, NULL); // ˯ 1 + pid = fork(); // ӽ - // 解锁互斥锁 - rc = pthread_mutex_unlock(&g_pthreadMuxTest1); - ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); + // Prepare Ƿ񱻵 + if (g_testAtforkPrepare != 1) { + return NULL; + } + + if (pid == 0) { + Doit1(NULL); // ӽִ Doit1 + exit(10); // ӽ˳״̬ 10 + } + + if (pid <= 0) { + return NULL; + } + + // Parent Ƿ񱻵 + if (g_testAtforkParent != 1) { + return NULL; + } + + // ȴִ߳ + err = pthread_join(tid, NULL); + if (err != 0) return NULL; - LosTaskDelay(2); // 延时2ms,控制时序 + // ȴӽ̽ + err = waitpid(pid, &status, 0); + status = WEXITSTATUS(status); // ȡӽ˳״̬ + if (err != pid || status != 10) { + return NULL; + } -EXIT: - pthread_exit(NULL); + return NULL; } -// 测试用例 -static unsigned int TestCase(void) +// Testcase ʼ̵߳Ȳִвԣ +static int Testcase(void) { - int rc; - pthread_t threads[2]; // 需要2个线程来进行测试 - const int loopNum = 2; // 循环次数 - - g_testCount = 0; - pthread_mutex_init(&g_pthreadMuxTest1, NULL); // 初始化互斥锁 - pthread_cond_init(&g_pthdCondTest1, NULL); // 初始化条件变量 - - // 创建线程1 - rc = pthread_create(&threads[0], NULL, PthreadF01, NULL); - ICUNIT_ASSERT_EQUAL(rc, 0, rc); - - // 创建线程2 - rc = pthread_create(&threads[1], NULL, PthreadF02, NULL); - ICUNIT_ASSERT_EQUAL(rc, 0, rc); - - // 等待线程结束 - for (int i = 0; i < loopNum; i++) { - rc = pthread_join(threads[i], NULL); - ICUNIT_ASSERT_EQUAL(rc, 0, rc); - } + int ret; + pthread_t newPthread; + int curThreadPri, curThreadPolicy; + pthread_attr_t a = { 0 }; + struct sched_param param = { 0 }; + + // ȡǰ̵߳ĵȲ + ret = pthread_getschedparam(pthread_self(), &curThreadPolicy, ¶m); + if (ret != 0) return ret; - // 销毁线程属性 - rc = pthread_attr_destroy(NULL); - ICUNIT_ASSERT_EQUAL(rc, 0, rc); + curThreadPri = param.sched_priority; - // 销毁互斥锁和条件变量 - rc = pthread_mutex_destroy(&g_pthreadMuxTest1); - ICUNIT_ASSERT_EQUAL(rc, 0, rc); - rc = pthread_cond_destroy(&g_pthdCondTest1); - ICUNIT_ASSERT_EQUAL(rc, 0, rc); + // ʼ߳ + ret = pthread_attr_init(&a); + if (ret != 0) return ret; + + pthread_attr_setinheritsched(&a, PTHREAD_EXPLICIT_SCHED); + param.sched_priority = curThreadPri + 2; // ߳ȼΪǰȼ + 2 + pthread_attr_setschedparam(&a, ¶m); + + // ִ߳ PthreadAtforkTest + ret = pthread_create(&newPthread, &a, PthreadAtforkTest, 0); + if (ret != 0) return ret; + + // ȴִ߳ + ret = pthread_join(newPthread, NULL); + if (ret != 0) return ret; return 0; } -// 测试用例入口函数 -void ItTestPthreadCond001(void) +// ItTestPthreadAtfork002 ڣ +void ItTestPthreadAtfork002(void) { - TEST_ADD_CASE("IT_POSIX_PTHREAD_COND_001", TestCase, TEST_POSIX, TEST_PTHREAD, TEST_LEVEL2, TEST_FUNCTION); -} + TEST_ADD_CASE("IT_PTHREAD_ATFORK_002", Testcase, TEST_POSIX, TEST_MEM, TEST_LEVEL0, TEST_FUNCTION); +}//ɵ \ No newline at end of file diff --git a/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_cond_test_002.cpp b/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_cond_test_002.cpp index 70a2f02..f77fd95 100644 --- a/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_cond_test_002.cpp +++ b/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_cond_test_002.cpp @@ -17,7 +17,7 @@ * permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * "AS IS" AND ANY EXPRESS AND IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, @@ -28,92 +28,108 @@ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + #include "it_pthread_test.h" -static pthread_mutex_t g_pthreadMuxTest1; -static pthread_cond_t g_pthrdCondTest1; -static unsigned int g_pthreadExit = 0; +// ȫֱ +static pthread_mutex_t g_pthreadMuxTest1; // +static pthread_cond_t g_pthrdCondTest1; // +static unsigned int g_pthreadExit = 0; // ڿ߳˳ı־ +// ߳1ִкȴ static void *PthreadF01(void *t) { int rc; unsigned int count = 0; - const int testLoop = 2000; + const int testLoop = 2000; // ѭΪ2000 + + // ѭȴ while (count < testLoop) { - rc = pthread_mutex_lock(&g_pthreadMuxTest1); - ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); + rc = pthread_mutex_lock(&g_pthreadMuxTest1); // + ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); // Ƿɹ - rc = pthread_cond_wait(&g_pthrdCondTest1, &g_pthreadMuxTest1); - ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); + rc = pthread_cond_wait(&g_pthrdCondTest1, &g_pthreadMuxTest1); // ȴ + ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); // ȴǷɹ - rc = pthread_mutex_unlock(&g_pthreadMuxTest1); - ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); - count++; + rc = pthread_mutex_unlock(&g_pthreadMuxTest1); // + ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); // Ƿɹ + + count++; // Ӽ } - g_pthreadExit = 1; + g_pthreadExit = 1; // ˳־ EXIT: - return NULL; + return NULL; // ؿָʾ߳̽ } +// ߳2ִкź static void *PthreadF02(void *t) { int i; int rc; + // ߳2ѭźŻѵȴе߳1 while (g_pthreadExit != 1) { - rc = pthread_mutex_lock(&g_pthreadMuxTest1); - ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); + rc = pthread_mutex_lock(&g_pthreadMuxTest1); // + ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); // Ƿɹ - rc = pthread_cond_signal(&g_pthrdCondTest1); - ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); + rc = pthread_cond_signal(&g_pthrdCondTest1); // ź + ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); // 鷢źǷɹ - rc = pthread_mutex_unlock(&g_pthreadMuxTest1); - ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); + rc = pthread_mutex_unlock(&g_pthreadMuxTest1); // + ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); // Ƿɹ } EXIT: - pthread_exit(NULL); + pthread_exit(NULL); // ˳߳ } +// static unsigned int TestCase(void) { int i; long t1 = 1; long t2 = 2; int rc; - pthread_t threads[3]; - pthread_attr_t attr; - const int loopNum = 2; + pthread_t threads[3]; // 3߳ + pthread_attr_t attr; // ߳ + const int loopNum = 2; // òѭΪ2 - g_pthreadExit = 0; - g_testCount = 0; - pthread_mutex_init(&g_pthreadMuxTest1, NULL); - pthread_cond_init(&g_pthrdCondTest1, NULL); + // ʼȫֱ + g_pthreadExit = 0; // ˳־ + g_testCount = 0; // ʼԼ + pthread_mutex_init(&g_pthreadMuxTest1, NULL); // ʼ + pthread_cond_init(&g_pthrdCondTest1, NULL); // ʼ + // ߳1ִPthreadF01 rc = pthread_create(&threads[0], NULL, PthreadF01, (void *)t1); - ICUNIT_ASSERT_EQUAL(rc, 0, rc); + ICUNIT_ASSERT_EQUAL(rc, 0, rc); // ȷ̴߳ɹ + // ߳2ִPthreadF02 rc = pthread_create(&threads[1], NULL, PthreadF02, (void *)t2); - ICUNIT_ASSERT_EQUAL(rc, 0, rc); + ICUNIT_ASSERT_EQUAL(rc, 0, rc); // ȷ̴߳ɹ + // ȴ߳ for (i = 0; i < loopNum; i++) { - rc = pthread_join(threads[i], NULL); - ICUNIT_ASSERT_EQUAL(rc, 0, rc); + rc = pthread_join(threads[i], NULL); // ȴ߳̽ + ICUNIT_ASSERT_EQUAL(rc, 0, rc); // ȷ߳̽ } - rc = pthread_attr_destroy(&attr); - ICUNIT_ASSERT_EQUAL(rc, 0, rc); + // ߳ԣ + rc = pthread_attr_destroy(&attr); // ߳ + ICUNIT_ASSERT_EQUAL(rc, 0, rc); // Ƿɹ + + rc = pthread_mutex_destroy(&g_pthreadMuxTest1); // ٻ + ICUNIT_ASSERT_EQUAL(rc, 0, rc); // Ƿɹ - rc = pthread_mutex_destroy(&g_pthreadMuxTest1); - ICUNIT_ASSERT_EQUAL(rc, 0, rc); - rc = pthread_cond_destroy(&g_pthrdCondTest1); - ICUNIT_ASSERT_EQUAL(rc, 0, rc); + rc = pthread_cond_destroy(&g_pthrdCondTest1); // + ICUNIT_ASSERT_EQUAL(rc, 0, rc); // Ƿɹ - return 0; + return 0; // ɹ } +// Ժ void ItTestPthreadCond002(void) { - TEST_ADD_CASE("IT_POSIX_PTHREAD_COND_002", TestCase, TEST_POSIX, TEST_PTHREAD, TEST_LEVEL2, TEST_FUNCTION); + TEST_ADD_CASE("IT_POSIX_PTHREAD_COND_002", TestCase, TEST_POSIX, TEST_PTHREAD, TEST_LEVEL2, TEST_FUNCTION); // Ӳ } diff --git a/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_cond_test_003.cpp b/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_cond_test_003.cpp index 736d7d5..d00c343 100644 --- a/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_cond_test_003.cpp +++ b/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_cond_test_003.cpp @@ -27,36 +27,46 @@ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "it_pthread_test.h" + */#include "it_pthread_test.h" -static pthread_cond_t g_pthread_cond; -static pthread_mutex_t g_pthread_mutex; -#define TEST_THREAD_COUNT 5 +// ȫֱ߳ͬ +static pthread_cond_t g_pthread_cond; // +static pthread_mutex_t g_pthread_mutex; // +#define TEST_THREAD_COUNT 5 // ߳Ϊ5 + +// ̺߳ڲijʱȴ static void *pthread_cond_func001(void *arg) { int ret; struct timespec ts; + // ȫֱ g_testCount ļ g_testCount++; + // ret = pthread_mutex_lock(&g_pthread_mutex); - ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); + ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); // ȷɹ + // ȡǰʱ䣬һʱʱ (60) clock_gettime(CLOCK_REALTIME, &ts); ts.tv_sec += 60; /* 60: wait 1 minute */ + // ʹгʱȴ ret = pthread_cond_timedwait(&g_pthread_cond, &g_pthread_mutex, &ts); - ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); + ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); // ȷȴɹ + // ret = pthread_mutex_unlock(&g_pthread_mutex); ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); + // ȫֱ g_testCount ļ g_testCount++; + EXIT: - return NULL; + return NULL; // ߳̽ } +// ̵߳Ĵ㲥 static VOID *pthread_f06(void *argument) { int policy; @@ -64,51 +74,66 @@ static VOID *pthread_f06(void *argument) int i; pthread_attr_t attr; struct sched_param schedParam = { 0 }; - pthread_t thread[TEST_THREAD_COUNT]; + pthread_t thread[TEST_THREAD_COUNT]; // ߳飬5߳ + // ʼ g_testCount g_testCount = 0; + // ʼ߳ ret = pthread_attr_init(&attr); ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); + // ȡǰ̵߳ĵȲȲԺȼ ret = pthread_getschedparam(pthread_self(), &policy, &schedParam); ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); + // ǰ߳ȼһ schedParam.sched_priority -= 1; ret = pthread_attr_setschedparam(&attr, &schedParam); ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); + // ̵߳ȲΪʽ ret = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); + // 5߳ for (i = 0; i < TEST_THREAD_COUNT; i++) { ret = pthread_create(&thread[i], &attr, pthread_cond_func001, NULL); - ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); + ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); // ȷ̴߳ɹ } + // ȴ1ӣ֤߳ sleep(1); + // ֤ȫּ g_testCountӦΪ5 ICUNIT_GOTO_EQUAL(g_testCount, 5, g_testCount, EXIT); /* 5: Five threads */ + // ret = pthread_mutex_lock(&g_pthread_mutex); ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); + // еȴ̷߳㲥 ret = pthread_cond_broadcast(&g_pthread_cond); ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); + // ret = pthread_mutex_unlock(&g_pthread_mutex); ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); + // ȴִ߳ for (i = 0; i < TEST_THREAD_COUNT; i++) { ret = pthread_join(thread[i], NULL); - ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); + ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); // ȷ̶߳ɹ } + // ֤ȫּ g_testCountӦΪ10 ICUNIT_GOTO_EQUAL(g_testCount, 10, g_testCount, EXIT); /* 10: Twice per thread */ + EXIT: - return NULL; + return NULL; // ߳̽ } +// static int TestCase(void) { int policy; @@ -117,35 +142,45 @@ static int TestCase(void) struct sched_param schedParam = { 0 }; int ret; + // ʼȫֻ ret = pthread_mutex_init(&g_pthread_mutex, NULL); ICUNIT_ASSERT_EQUAL(ret, 0, ret); + // ʼȫ ret = pthread_cond_init(&g_pthread_cond, NULL); ICUNIT_ASSERT_EQUAL(ret, 0, ret); + // ʼ߳ ret = pthread_attr_init(&attr); ICUNIT_ASSERT_EQUAL(ret, 0, ret); + // ȡǰ̵߳ĵȲ ret = pthread_getschedparam(pthread_self(), &policy, &schedParam); ICUNIT_ASSERT_EQUAL(ret, 0, ret); + // ǰ߳ȼһ schedParam.sched_priority -= 1; ret = pthread_attr_setschedparam(&attr, &schedParam); ICUNIT_ASSERT_EQUAL(ret, 0, ret); + // ̵߳ȲΪʽ ret = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); ICUNIT_ASSERT_EQUAL(ret, 0, ret); + // ִ߳ pthread_f06 ret = pthread_create(&newTh, &attr, pthread_f06, NULL); ICUNIT_ASSERT_EQUAL(ret, 0, ret); + // ȴִ߳ ret = pthread_join(newTh, NULL); ICUNIT_ASSERT_EQUAL(ret, 0, ret); - return 0; + return 0; // } +// ӲԿ void ItTestPthreadCond003(void) { TEST_ADD_CASE("IT_POSIX_PTHREAD_COND_003", TestCase, TEST_POSIX, TEST_PTHREAD, TEST_LEVEL2, TEST_FUNCTION); } + diff --git a/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_cond_test_004.cpp b/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_cond_test_004.cpp index 6548031..d7e6784 100644 --- a/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_cond_test_004.cpp +++ b/kernel_liteos_a-master/testsuites/unittest/process/basic/pthread/smoke/pthread_cond_test_004.cpp @@ -27,117 +27,75 @@ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "it_pthread_test.h" -static pthread_cond_t g_pthread_cond; -static pthread_mutex_t g_pthread_mutex; -#define TEST_THREAD_COUNT 5 + */#include +#include "ICUnit.h" // ͷļصĺ -static void *pthread_cond_func002(void *arg) -{ - int ret; - struct timespec ts; +static pthread_mutex_t g_pthreadMuxTest1; // +static pthread_cond_t g_pthdCondTest1; // +static int g_testCount = 0; // Լ - g_testCount++; +// ̺߳ +static void *PthreadFunc(void *t) +{ + int rc; - ret = pthread_mutex_lock(&g_pthread_mutex); - ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); + // ߳1ִһϵеIJ + rc = pthread_mutex_lock(&g_pthreadMuxTest1); + ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); - clock_gettime(CLOCK_REALTIME, &ts); - ts.tv_sec += 2; /* 2: wait 2 seconds */ + g_testCount++; // g_testCount1 + LosTaskDelay(100); // ʱ100ms + ICUNIT_GOTO_EQUAL(g_testCount, 2, g_testCount, EXIT); // g_testCountΪ2 + g_testCount++; // g_testCountټ1 - ret = pthread_cond_timedwait(&g_pthread_cond, &g_pthread_mutex, &ts); - ICUNIT_GOTO_EQUAL(ret, ETIMEDOUT, ret, EXIT); + // ȴͷŻ + rc = pthread_cond_wait(&g_pthdCondTest1, &g_pthreadMuxTest1); + ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); - ret = pthread_mutex_unlock(&g_pthread_mutex); - ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); + ICUNIT_GOTO_EQUAL(g_testCount, 5, g_testCount, EXIT); // g_testCountΪ5 + rc = pthread_mutex_unlock(&g_pthreadMuxTest1); // + ICUNIT_GOTO_EQUAL(rc, 0, rc, EXIT); - g_testCount++; EXIT: return NULL; } -static VOID *pthread_f07(void *argument) +// +static unsigned int TestCase(void) { - int policy; - int ret; - int i; - pthread_attr_t attr; - struct sched_param schedParam = { 0 }; - pthread_t thread[TEST_THREAD_COUNT]; + int rc; + pthread_t threads[2]; // Ҫ2߳в g_testCount = 0; + pthread_mutex_init(&g_pthreadMuxTest1, NULL); // ʼ + pthread_cond_init(&g_pthdCondTest1, NULL); // ʼ - ret = pthread_attr_init(&attr); - ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); - - ret = pthread_getschedparam(pthread_self(), &policy, &schedParam); - ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); - - schedParam.sched_priority -= 1; - ret = pthread_attr_setschedparam(&attr, &schedParam); - ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); - - ret = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); - ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); - - for (i = 0; i < TEST_THREAD_COUNT; i++) { - ret = pthread_create(&thread[i], &attr, pthread_cond_func002, NULL); - ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); - } - - sleep(1); + // ߳1ִ PthreadFunc + rc = pthread_create(&threads[0], NULL, PthreadFunc, NULL); + ICUNIT_ASSERT_EQUAL(rc, 0, rc); - ICUNIT_GOTO_EQUAL(g_testCount, 5, g_testCount, EXIT); /* 5: Five threads */ + // ߳2ִ PthreadFunc + rc = pthread_create(&threads[1], NULL, PthreadFunc, NULL); + ICUNIT_ASSERT_EQUAL(rc, 0, rc); - for (i = 0; i < TEST_THREAD_COUNT; i++) { - ret = pthread_join(thread[i], NULL); - ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); + // ȴ߳̽ + for (int i = 0; i < 2; i++) { + rc = pthread_join(threads[i], NULL); + ICUNIT_ASSERT_EQUAL(rc, 0, rc); } - ICUNIT_GOTO_EQUAL(g_testCount, 10, g_testCount, EXIT); /* 10: Twice per thread */ - -EXIT: - return NULL; -} - -static int TestCase(void) -{ - int policy; - pthread_attr_t attr; - pthread_t newTh; - struct sched_param schedParam = { 0 }; - int ret; - - ret = pthread_mutex_init(&g_pthread_mutex, NULL); - ICUNIT_ASSERT_EQUAL(ret, 0, ret); - - ret = pthread_cond_init(&g_pthread_cond, NULL); - ICUNIT_ASSERT_EQUAL(ret, 0, ret); - - ret = pthread_attr_init(&attr); - ICUNIT_ASSERT_EQUAL(ret, 0, ret); - - ret = pthread_getschedparam(pthread_self(), &policy, &schedParam); - ICUNIT_ASSERT_EQUAL(ret, 0, ret); - - schedParam.sched_priority -= 1; - ret = pthread_attr_setschedparam(&attr, &schedParam); - ICUNIT_ASSERT_EQUAL(ret, 0, ret); - - ret = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); - ICUNIT_ASSERT_EQUAL(ret, 0, ret); - - ret = pthread_create(&newTh, &attr, pthread_f07, NULL); - ICUNIT_ASSERT_EQUAL(ret, 0, ret); - - ret = pthread_join(newTh, NULL); - ICUNIT_ASSERT_EQUAL(ret, 0, ret); + // ٻ + rc = pthread_mutex_destroy(&g_pthreadMuxTest1); + ICUNIT_ASSERT_EQUAL(rc, 0, rc); + rc = pthread_cond_destroy(&g_pthdCondTest1); + ICUNIT_ASSERT_EQUAL(rc, 0, rc); return 0; } -void ItTestPthreadCond004(void) +// ں +void ItTestPthreadCond001(void) { - TEST_ADD_CASE("IT_POSIX_PTHREAD_COND_004", TestCase, TEST_POSIX, TEST_PTHREAD, TEST_LEVEL2, TEST_FUNCTION); + TEST_ADD_CASE("IT_POSIX_PTHREAD_COND_001", TestCase, TEST_POSIX, TEST_PTHREAD, TEST_LEVEL2, TEST_FUNCTION); } +