|
|
@@ -1,12 +1,12 @@
|
|
|
-/*
|
|
|
- * Copyright (c) 2006-2018, RT-Thread Development Team
|
|
|
- *
|
|
|
- * SPDX-License-Identifier: Apache-2.0
|
|
|
- *
|
|
|
- * Change Logs:
|
|
|
- * Date Author Notes
|
|
|
- * 2018-08-24 yangjie the first version
|
|
|
- */
|
|
|
+/*
|
|
|
+ * Copyright (c) 2006-2018, RT-Thread Development Team
|
|
|
+ *
|
|
|
+ * SPDX-License-Identifier: Apache-2.0
|
|
|
+ *
|
|
|
+ * Change Logs:
|
|
|
+ * Date Author Notes
|
|
|
+ * 2018-08-24 yangjie the first version
|
|
|
+ */
|
|
|
|
|
|
/*
|
|
|
* 程序清单:互斥锁例程
|
|
|
@@ -22,49 +22,49 @@
|
|
|
|
|
|
/* 指向互斥量的指针 */
|
|
|
static rt_mutex_t dynamic_mutex = RT_NULL;
|
|
|
-static rt_uint8_t number1,number2 = 0;
|
|
|
+static rt_uint8_t number1, number2 = 0;
|
|
|
|
|
|
ALIGN(RT_ALIGN_SIZE)
|
|
|
static char thread1_stack[1024];
|
|
|
static struct rt_thread thread1;
|
|
|
static void rt_thread_entry1(void *parameter)
|
|
|
{
|
|
|
- while(1)
|
|
|
- {
|
|
|
- /* 线程1获取到互斥量后,先后对number1、number2进行加1操作,然后释放互斥量 */
|
|
|
- rt_mutex_take(dynamic_mutex, RT_WAITING_FOREVER);
|
|
|
- number1++;
|
|
|
- rt_thread_mdelay(10);
|
|
|
- number2++;
|
|
|
- rt_mutex_release(dynamic_mutex);
|
|
|
- }
|
|
|
+ while (1)
|
|
|
+ {
|
|
|
+ /* 线程1获取到互斥量后,先后对number1、number2进行加1操作,然后释放互斥量 */
|
|
|
+ rt_mutex_take(dynamic_mutex, RT_WAITING_FOREVER);
|
|
|
+ number1++;
|
|
|
+ rt_thread_mdelay(10);
|
|
|
+ number2++;
|
|
|
+ rt_mutex_release(dynamic_mutex);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
ALIGN(RT_ALIGN_SIZE)
|
|
|
static char thread2_stack[1024];
|
|
|
static struct rt_thread thread2;
|
|
|
static void rt_thread_entry2(void *parameter)
|
|
|
-{
|
|
|
- while(1)
|
|
|
- {
|
|
|
- /* 线程2获取到互斥量后,检查number1、number2的值是否相同,相同则表示mutex起到了锁的作用 */
|
|
|
- rt_mutex_take(dynamic_mutex, RT_WAITING_FOREVER);
|
|
|
- if(number1 != number2)
|
|
|
- {
|
|
|
- rt_kprintf("not protect.number1 = %d, mumber2 = %d \n",number1 ,number2);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- rt_kprintf("mutex protect ,number1 = mumber2 is %d\n",number1);
|
|
|
- }
|
|
|
-
|
|
|
- number1++;
|
|
|
- number2++;
|
|
|
- rt_mutex_release(dynamic_mutex);
|
|
|
-
|
|
|
- if(number1 >=50)
|
|
|
- return;
|
|
|
- }
|
|
|
+{
|
|
|
+ while (1)
|
|
|
+ {
|
|
|
+ /* 线程2获取到互斥量后,检查number1、number2的值是否相同,相同则表示mutex起到了锁的作用 */
|
|
|
+ rt_mutex_take(dynamic_mutex, RT_WAITING_FOREVER);
|
|
|
+ if (number1 != number2)
|
|
|
+ {
|
|
|
+ rt_kprintf("not protect.number1 = %d, mumber2 = %d \n", number1, number2);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ rt_kprintf("mutex protect ,number1 = mumber2 is %d\n", number1);
|
|
|
+ }
|
|
|
+
|
|
|
+ number1++;
|
|
|
+ number2++;
|
|
|
+ rt_mutex_release(dynamic_mutex);
|
|
|
+
|
|
|
+ if (number1 >= 50)
|
|
|
+ return;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/* 互斥量示例的初始化 */
|
|
|
@@ -83,17 +83,17 @@ int mutex_sample(void)
|
|
|
rt_thread_entry1,
|
|
|
RT_NULL,
|
|
|
&thread1_stack[0],
|
|
|
- sizeof(thread1_stack),
|
|
|
+ sizeof(thread1_stack),
|
|
|
THREAD_PRIORITY, THREAD_TIMESLICE);
|
|
|
rt_thread_startup(&thread1);
|
|
|
-
|
|
|
+
|
|
|
rt_thread_init(&thread2,
|
|
|
"thread2",
|
|
|
rt_thread_entry2,
|
|
|
RT_NULL,
|
|
|
&thread2_stack[0],
|
|
|
- sizeof(thread2_stack),
|
|
|
- THREAD_PRIORITY-1, THREAD_TIMESLICE);
|
|
|
+ sizeof(thread2_stack),
|
|
|
+ THREAD_PRIORITY - 1, THREAD_TIMESLICE);
|
|
|
rt_thread_startup(&thread2);
|
|
|
return 0;
|
|
|
}
|