diff --git a/mingw-w64-libraries/winpthreads/tests/Makefile.am b/mingw-w64-libraries/winpthreads/tests/Makefile.am
index 785da97..8087899 100644
--- a/mingw-w64-libraries/winpthreads/tests/Makefile.am
+++ b/mingw-w64-libraries/winpthreads/tests/Makefile.am
@@ -110,6 +110,10 @@
 	pthread_misc/stress1       \
 	pthread_misc/valid1        \
 	pthread_misc/valid2        \
+	pthread_mutex/attr-prioceiling                 \
+	pthread_mutex/attr-protocol                    \
+	pthread_mutex/attr-pshared                     \
+	pthread_mutex/attr-type                        \
 	pthread_mutex/default-basic                    \
 	pthread_mutex/default-lock-recursive           \
 	pthread_mutex/default-static                   \
diff --git a/mingw-w64-libraries/winpthreads/tests/pthread_mutex/attr-prioceiling.c b/mingw-w64-libraries/winpthreads/tests/pthread_mutex/attr-prioceiling.c
new file mode 100644
index 0000000..789b87e
--- /dev/null
+++ b/mingw-w64-libraries/winpthreads/tests/pthread_mutex/attr-prioceiling.c
@@ -0,0 +1,63 @@
+/*
+   Copyright (c) 2026 mingw-w64 project
+
+   Permission is hereby granted, free of charge, to any person obtaining a
+   copy of this software and associated documentation files (the "Software"),
+   to deal in the Software without restriction, including without limitation
+   the rights to use, copy, modify, merge, publish, distribute, sublicense,
+   and/or sell copies of the Software, and to permit persons to whom the
+   Software is furnished to do so, subject to the following conditions:
+
+   The above copyright notice and this permission notice shall be included in
+   all copies or substantial portions of the Software.
+
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+   DEALINGS IN THE SOFTWARE.
+*/
+
+#include "test.h"
+
+/**
+ * Test Summary:
+ *
+ * Test functions `pthread_mutexattr_setprioceiling` and
+ * `pthread_mutexattr_getprioceiling`.
+ */
+
+static void DoTest (int value, int expectedValue, int expectedReturn1, int expectedReturn2) {
+  pthread_mutexattr_t mutexAttr;
+  pthread_mutex_t mutex;
+
+  assert (pthread_mutexattr_init (&mutexAttr) == 0);
+  assert (pthread_mutexattr_setprioceiling (&mutexAttr, value) == expectedReturn1);
+  assert (pthread_mutexattr_getprioceiling (&mutexAttr, &value) == 0);
+  assert (value == expectedValue);
+  assert (pthread_mutex_init (&mutex, &mutexAttr) == expectedReturn2);
+  if (expectedReturn2 == 0) {
+    assert (pthread_mutex_destroy (&mutex) == 0);
+  }
+  assert (pthread_mutexattr_destroy (&mutexAttr) == 0);
+}
+
+int main (void) {
+  /**
+   * Any valid `THRAED_PRIORITY_*` value can be set for prioceiling attribute.
+   *
+   * Currently, it has no effect; POSIX realtime extensions are not implemented.
+   */
+  for (int value = THREAD_PRIORITY_IDLE; value <= THREAD_PRIORITY_TIME_CRITICAL; ++value) {
+    DoTest (value, value, 0, 0);
+  }
+
+  /**
+   * Try setting an invalid value; default attribute value must be used.
+   */
+  DoTest (0xFF, THREAD_PRIORITY_NORMAL, EINVAL, 0);
+
+  return 0;
+}
diff --git a/mingw-w64-libraries/winpthreads/tests/pthread_mutex/attr-protocol.c b/mingw-w64-libraries/winpthreads/tests/pthread_mutex/attr-protocol.c
new file mode 100644
index 0000000..d1c0b00
--- /dev/null
+++ b/mingw-w64-libraries/winpthreads/tests/pthread_mutex/attr-protocol.c
@@ -0,0 +1,65 @@
+/*
+   Copyright (c) 2026 mingw-w64 project
+
+   Permission is hereby granted, free of charge, to any person obtaining a
+   copy of this software and associated documentation files (the "Software"),
+   to deal in the Software without restriction, including without limitation
+   the rights to use, copy, modify, merge, publish, distribute, sublicense,
+   and/or sell copies of the Software, and to permit persons to whom the
+   Software is furnished to do so, subject to the following conditions:
+
+   The above copyright notice and this permission notice shall be included in
+   all copies or substantial portions of the Software.
+
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+   DEALINGS IN THE SOFTWARE.
+*/
+
+#include "test.h"
+
+/**
+ * Test Summary:
+ *
+ * Test functions `pthread_mutexattr_setprotocol` and
+ * `pthread_mutexattr_getprotocol`.
+ */
+
+static void DoTest (int value, int expectedValue, int expectedReturn1, int expectedReturn2) {
+  pthread_mutexattr_t mutexAttr;
+  pthread_mutex_t mutex;
+
+  assert (pthread_mutexattr_init (&mutexAttr) == 0);
+  assert (pthread_mutexattr_setprotocol (&mutexAttr, value) == expectedReturn1);
+  assert (pthread_mutexattr_getprotocol (&mutexAttr, &value) == 0);
+  assert (value == expectedValue);
+  assert (pthread_mutex_init (&mutex, &mutexAttr) == expectedReturn2);
+  if (expectedReturn2 == 0) {
+    assert (pthread_mutex_destroy (&mutex) == 0);
+  }
+  assert (pthread_mutexattr_destroy (&mutexAttr) == 0);
+}
+
+int main (void) {
+  /**
+   * Currently winpthreads only supports `PTHREAD_PRIO_NONE`.
+   */
+  DoTest (PTHREAD_PRIO_NONE, PTHREAD_PRIO_NONE, 0, 0);
+
+  /**
+   * POSIX realtime extensions are not implemented.
+   */
+  DoTest (PTHREAD_PRIO_INHERIT, PTHREAD_PRIO_NONE, ENOTSUP, 0);
+  DoTest (PTHREAD_PRIO_PROTECT, PTHREAD_PRIO_NONE, ENOTSUP, 0);
+
+  /**
+   * Try setting an invalid value; default attribute value must be used.
+   */
+  DoTest (0xFF, PTHREAD_PRIO_NONE, EINVAL, 0);
+
+  return 0;
+}
diff --git a/mingw-w64-libraries/winpthreads/tests/pthread_mutex/attr-pshared.c b/mingw-w64-libraries/winpthreads/tests/pthread_mutex/attr-pshared.c
new file mode 100644
index 0000000..f7937f0
--- /dev/null
+++ b/mingw-w64-libraries/winpthreads/tests/pthread_mutex/attr-pshared.c
@@ -0,0 +1,60 @@
+/*
+   Copyright (c) 2026 mingw-w64 project
+
+   Permission is hereby granted, free of charge, to any person obtaining a
+   copy of this software and associated documentation files (the "Software"),
+   to deal in the Software without restriction, including without limitation
+   the rights to use, copy, modify, merge, publish, distribute, sublicense,
+   and/or sell copies of the Software, and to permit persons to whom the
+   Software is furnished to do so, subject to the following conditions:
+
+   The above copyright notice and this permission notice shall be included in
+   all copies or substantial portions of the Software.
+
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+   DEALINGS IN THE SOFTWARE.
+*/
+
+#include "test.h"
+
+/**
+ * Test Summary:
+ *
+ * Test functions `pthread_mutexattr_setpshared` and
+ * `pthread_mutexattr_getpshared`.
+ */
+
+static void DoTest (int value, int expectedValue, int expectedReturn1, int expectedReturn2) {
+  pthread_mutexattr_t mutexAttr;
+  pthread_mutex_t mutex;
+
+  assert (pthread_mutexattr_init (&mutexAttr) == 0);
+  assert (pthread_mutexattr_setpshared (&mutexAttr, value) == expectedReturn1);
+  assert (pthread_mutexattr_getpshared (&mutexAttr, &value) == 0);
+  assert (value == expectedValue);
+  assert (pthread_mutex_init (&mutex, &mutexAttr) == expectedReturn2);
+  if (expectedReturn2 == 0) {
+    assert (pthread_mutex_destroy (&mutex) == 0);
+  }
+  assert (pthread_mutexattr_destroy (&mutexAttr) == 0);
+}
+
+int main (void) {
+  /**
+   * Currently winpthreads only supports `PTHREAD_PROCESS_PRIVATE`.
+   */
+  DoTest (PTHREAD_PROCESS_PRIVATE, PTHREAD_PROCESS_PRIVATE, 0, 0);
+  DoTest (PTHREAD_PROCESS_SHARED, PTHREAD_PROCESS_SHARED, 0, ENOSYS);
+
+  /**
+   * Try setting an invalid value; default attribute value must be used.
+   */
+  DoTest (0xFF, PTHREAD_PROCESS_PRIVATE, EINVAL, 0);
+
+  return 0;
+}
diff --git a/mingw-w64-libraries/winpthreads/tests/pthread_mutex/attr-type.c b/mingw-w64-libraries/winpthreads/tests/pthread_mutex/attr-type.c
new file mode 100644
index 0000000..16fa713
--- /dev/null
+++ b/mingw-w64-libraries/winpthreads/tests/pthread_mutex/attr-type.c
@@ -0,0 +1,65 @@
+/*
+   Copyright (c) 2026 mingw-w64 project
+
+   Permission is hereby granted, free of charge, to any person obtaining a
+   copy of this software and associated documentation files (the "Software"),
+   to deal in the Software without restriction, including without limitation
+   the rights to use, copy, modify, merge, publish, distribute, sublicense,
+   and/or sell copies of the Software, and to permit persons to whom the
+   Software is furnished to do so, subject to the following conditions:
+
+   The above copyright notice and this permission notice shall be included in
+   all copies or substantial portions of the Software.
+
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+   DEALINGS IN THE SOFTWARE.
+*/
+
+#include "test.h"
+
+/**
+ * Test Summary:
+ *
+ * Test functions `pthread_mutexattr_settype` and `pthread_mutexattr_gettype`.
+ */
+
+static void DoTest (int value, int expectedValue, int expectedReturn1, int expectedReturn2) {
+  pthread_mutexattr_t mutexAttr;
+  pthread_mutex_t mutex;
+
+  assert (pthread_mutexattr_init (&mutexAttr) == 0);
+  assert (pthread_mutexattr_settype (&mutexAttr, value) == expectedReturn1);
+  assert (pthread_mutexattr_gettype (&mutexAttr, &value) == 0);
+  assert (value == expectedValue);
+  assert (pthread_mutex_init (&mutex, &mutexAttr) == expectedReturn2);
+  if (expectedReturn2 == 0) {
+    assert (pthread_mutex_destroy (&mutex) == 0);
+  }
+  assert (pthread_mutexattr_destroy (&mutexAttr) == 0);
+}
+
+int main (void) {
+  /**
+   * Default mutex type is `PTHREAD_MUTEX_NORMAL`.
+   */
+  DoTest (PTHREAD_MUTEX_DEFAULT, PTHREAD_MUTEX_NORMAL, 0, 0);
+
+  /**
+   * Mutex types defined by POSIX.
+   */
+  DoTest (PTHREAD_MUTEX_NORMAL, PTHREAD_MUTEX_NORMAL, 0, 0);
+  DoTest (PTHREAD_MUTEX_ERRORCHECK, PTHREAD_MUTEX_ERRORCHECK, 0, 0);
+  DoTest (PTHREAD_MUTEX_RECURSIVE, PTHREAD_MUTEX_RECURSIVE, 0, 0);
+
+  /**
+   * Try setting an invalid value; default attribute value must be used.
+   */
+  DoTest (0xFF, PTHREAD_MUTEX_NORMAL, EINVAL, 0);
+
+  return 0;
+}
