Raise a RuntimeError when tee iterator is consumed from different threads (GH-15567)

diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c
index 781d0cc..101addc 100644
--- a/Modules/itertoolsmodule.c
+++ b/Modules/itertoolsmodule.c
@@ -452,6 +452,7 @@
     teedataobject *dataobj;
     int index;                  /* 0 <= index <= LINKCELLS */
     PyObject *weakreflist;
+    unsigned long thread_id;
 } teeobject;
 
 static PyTypeObject teedataobject_type;
@@ -680,6 +681,11 @@
 {
     PyObject *value, *link;
 
+    if (to->thread_id != PyThread_get_thread_ident()) {
+        PyErr_SetString(PyExc_RuntimeError,
+            "tee() iterator can not be consumed from different threads.");
+        return NULL;
+    }
     if (to->index >= LINKCELLS) {
         link = teedataobject_jumplink(to->dataobj);
         if (link == NULL)
@@ -713,6 +719,7 @@
     newto->dataobj = to->dataobj;
     newto->index = to->index;
     newto->weakreflist = NULL;
+    newto->thread_id = to->thread_id;
     PyObject_GC_Track(newto);
     return (PyObject *)newto;
 }
@@ -745,6 +752,7 @@
 
     to->index = 0;
     to->weakreflist = NULL;
+    to->thread_id = PyThread_get_thread_ident();
     PyObject_GC_Track(to);
 done:
     Py_XDECREF(it);