mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Change title to {Python/C API Reference Manual}; remove \bcode \ecode
which appears to be out of fashion in this file.
This commit is contained in:
parent
46a0bb4c3c
commit
9faf4c57b0
2 changed files with 22 additions and 22 deletions
|
@ -1,6 +1,6 @@
|
|||
\documentstyle[twoside,11pt,myformat]{report}
|
||||
|
||||
\title{Python/C API Reference}
|
||||
\title{Python/C API Reference Manual}
|
||||
|
||||
\input{boilerplate}
|
||||
|
||||
|
@ -1058,13 +1058,13 @@ already imported.)
|
|||
This is the structure type definition for frozen module descriptors,
|
||||
as generated by the \code{freeze} utility (see \file{Tools/freeze/} in
|
||||
the Python source distribution). Its definition is:
|
||||
\bcode\begin{verbatim}
|
||||
\begin{verbatim}
|
||||
struct _frozen {
|
||||
char *name;
|
||||
unsigned char *code;
|
||||
int size;
|
||||
};
|
||||
\end{verbatim}\ecode
|
||||
\end{verbatim}
|
||||
\end{ctypedesc}
|
||||
|
||||
\begin{cvardesc}{struct _frozen *}{PyImport_FrozenModules}
|
||||
|
@ -2047,21 +2047,21 @@ the current thread state must be manipulated explicitly.
|
|||
This is easy enough in most cases. Most code manipulating the global
|
||||
interpreter lock has the following simple structure:
|
||||
|
||||
\bcode\begin{verbatim}
|
||||
\begin{verbatim}
|
||||
Save the thread state in a local variable.
|
||||
Release the interpreter lock.
|
||||
...Do some blocking I/O operation...
|
||||
Reacquire the interpreter lock.
|
||||
Restore the thread state from the local variable.
|
||||
\end{verbatim}\ecode
|
||||
\end{verbatim}
|
||||
|
||||
This is so common that a pair of macros exists to simplify it:
|
||||
|
||||
\bcode\begin{verbatim}
|
||||
\begin{verbatim}
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
...Do some blocking I/O operation...
|
||||
Py_END_ALLOW_THREADS
|
||||
\end{verbatim}\ecode
|
||||
\end{verbatim}
|
||||
|
||||
The BEGIN macro opens a new block and declares a hidden local
|
||||
variable; the END macro closes the block. Another advantage of using
|
||||
|
@ -2072,19 +2072,19 @@ manipulations.
|
|||
When thread support is enabled, the block above expands to the
|
||||
following code:
|
||||
|
||||
\bcode\begin{verbatim}
|
||||
\begin{verbatim}
|
||||
{
|
||||
PyThreadState *_save;
|
||||
_save = PyEval_SaveThread();
|
||||
...Do some blocking I/O operation...
|
||||
PyEval_RestoreThread(_save);
|
||||
}
|
||||
\end{verbatim}\ecode
|
||||
\end{verbatim}
|
||||
|
||||
Using even lower level primitives, we can get roughly the same effect
|
||||
as follows:
|
||||
|
||||
\bcode\begin{verbatim}
|
||||
\begin{verbatim}
|
||||
{
|
||||
PyThreadState *_save;
|
||||
_save = PyThreadState_Swap(NULL);
|
||||
|
@ -2093,7 +2093,7 @@ as follows:
|
|||
PyEval_AcquireLock();
|
||||
PyThreadState_Swap(_save);
|
||||
}
|
||||
\end{verbatim}\ecode
|
||||
\end{verbatim}
|
||||
|
||||
There are some subtle differences; in particular,
|
||||
\code{PyEval_RestoreThread()} saves and restores the value of the
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue