No, it's not a matter of sending to the same address multiple times, rather, CPFP works by spending the output of a previous transaction in a second transaction with a higher fee.
An unconfirmed transaction
A with 500B size paid 20000 satoshis fee which corresponds to a fee rate of 40 satoshis per byte. The transaction has two outputs:
A:0 is signing over funds to the recipient
A:1 is signing the remainder back over to the sender
Let's say that the transaction is stuck because it would have needed a fee rate of 100 satoshis per byte to get selected into a block.
As the sender, you now create a second transaction
B that uses the unconfirmed transaction
A's change output
A:1 as one of its inputs. Let's say that this second transaction
B has 250B. To pay a fee rate of 100 sat/B for the second transaction, you'd specify a fee of 25,000 satoshis. But you also wanted to speed up the unconfirmed parent transaction! To do so, you add another 30000 satoshis, which brings the child transaction's fee up to 55000 satoshis.
This leaves the parent transaction
A with a fee rate of 40 satoshis/byte, and the child transaction
B with a fee rate of 220 satoshis/byte, but the two transactions in sum with 75,000 satoshis for 750 bytes of transactions, or a fee rate of 100 satoshis per byte. In order to get the juicy fee from the child transaction
B, a miner has to also confirm transaction
B is invalid if
A is unconfirmed. They are thusly incentivized to include both
B by the child paying for the parent.
Note that the recipient has the same option by creating an analogous CPFP transaction via spending
A:0. (H/T Thalis K. for pointing this out in the comments)